提供方法
- 无初始值,返回值可能为空,只有累加器表达式。
Optional<T> reduce(BinaryOperator<T> accumulator);
T reduce(T identity, BinaryOperator<T> accumulator);
- 第三个参数只有当并行流时才起作用,串行流时,第三个参数无效哦。
<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);
示例
public class MyStream {
public static void main(String[] args) {
Integer sum = Stream.of(1, 2, 3).parallel()
.reduce(100, (a, b) -> a + b, (result1, result2) -> result1 + result2);//等同于下方,下方语句便于打印每一步的输出结果。
System.out.println(sum);
Integer sum1 = Stream.of(1, 2, 3).parallel()
.reduce(100, (a, b) -> {
System.out.println("in accumulator, a = "
+ a + ", b = " + b);
return a + b;
}, (result1, result2) -> {
System.out.println("in accumulator, result1 = "
+ result1 + ", result2 = " + result2);
return result1 + result2;
});
System.out.println(sum1);
}
}
控制台输出
306
in accumulator, a = 100, b = 2
in accumulator, a = 100, b = 1
in accumulator, a = 100, b = 3
in accumulator, result1 = 102, result2 = 103
in accumulator, result1 = 101, result2 = 205
306
分析
![在这里插入图片描述]
- 并行 Stream 和 顺序 Stream 的差异在于初始值,并行流初始值不变
- 累加结果并不是 101,102,103,并行执行导致