Предполагая, что у меня есть 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]