Вы можете сделать это с помощью атомного номера. Например:
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
public class Accumulator {
public static LongStream toCumulativeSumStream(IntStream ints){
AtomicLong sum = new AtomicLong(0);
return ints.sequential().mapToLong(sum::addAndGet);
}
public static void main(String[] args){
LongStream sums = Accumulator.toCumulativeSumStream(IntStream.range(1, 5));
sums.forEachOrdered(System.out::println);
}
}
Эти выходы:
1
3
6
10
Я использовал Long для хранения сумм, потому что вполне возможно, что два ints будут хорошо дополняться Integer.MAX_VALUE
, а у длинного меньше вероятность переполнения.
Попробуйте прокомментировать:
// minimize: true