3 回答
![?](http://img1.sycdn.imooc.com/54584dd900014f6c02200220-100-100.jpg)
TA贡献1842条经验 获得超12个赞
尝试StreamEx。我认为它提供了您想要的提取API:
List<Integer> result = StreamEx.of(1, 2, 3).scanLeft((i, j) -> i + j);
System.out.println(result); // [1, 3, 6]
![?](http://img1.sycdn.imooc.com/545868c20001b8c402200220-100-100.jpg)
TA贡献1828条经验 获得超3个赞
您可以尝试从其他不受欢迎的副作用中受益。由于您的目标是处理流并继续处理流,因此我们可以使用该map方法来实现这一点。以下代码利用了副作用。
public class Scan {
public static void main(String[] args) {
Accumulator accumulator = new Accumulator();
Stream<Integer> originalStream = Stream.of(1, 2, 3);
Stream<Integer> scannedStream = originalStream
.map(i -> accumulator.accumulate(i));
List<Integer> list = scannedStream
.collect(Collectors.toList()); // [1, 3, 6]
for (Integer i : list) {
System.out.println(i);
}
}
private static class Accumulator {
private int value;
public int accumulate(int i) {
return value += i;
}
}
}
所述Accumulator可以通过替换Function以用于不同的扫描-operations。
但是您必须意识到限制和担忧(例如线程安全性)。
添加回答
举报