流有状态计算:累积总和
2022-09-02 04:36:12
假设我有一个Java IntStream,是否可以将其转换为具有累积总和的IntStream?例如,以 [4, 2, 6, ...] 开头的流应转换为 [4, 6, 12, ...]。
更一般地说,应该如何实现有状态流操作?感觉这应该是可能的:
myIntStream.map(new Function<Integer, Integer> {
int sum = 0;
Integer apply(Integer value){
return sum += value;
}
);
有明显的限制,即这仅适用于顺序流。但是,Stream.map 显式需要无状态映射函数。我是否错过了 Stream.statefulMap 或 Stream.cumulative 操作,或者缺少 Java 流的要点?
例如,与Haskell进行比较,其中scanl1函数恰好解决了这个例子:
scanl1 (+) [1 2 3 4] = [1 3 6 10]