Java 8 Stream - Reduce 函数的组合器未被执行
Java 8 Stream - Reduce function's combiner not getting executed
我正在使用一个带有三个参数的简单 reduce 方法,即。身份,累加器和组合器。
这是我的代码...
Integer ageSumComb = persons
.stream()
.reduce(0,
(sum, p) -> {
System.out.println("Accumulator: Sum= "+ sum + " Person= " + p);
return sum += p.age;
},
(sum1, sum2) -> {
System.out.format("Combiner: Sum1= " + sum1 + " Sum2= "+ sum2);
return sum1 + sum2;
但实际情况是 Combiner 没有被执行。我不明白这背后的原因。
这是我的输出..
Accumulator: Sum= 0 Person= Max
Accumulator: Sum= 18 Person= Peter
Accumulator: Sum= 41 Person= Pamela
Accumulator: Sum= 64 Person= David
Accumulator: Sum= 76 Person= Pam
但是,没有编译错误,也没有异常,我的输出完全正确,与我预期的一样。但是没明白为什么combiner没有执行。
Combiner 仅针对并行流执行。
如果要使用组合器
,则需要使用 parallelStream
而不是 stream
我正在使用一个带有三个参数的简单 reduce 方法,即。身份,累加器和组合器。 这是我的代码...
Integer ageSumComb = persons
.stream()
.reduce(0,
(sum, p) -> {
System.out.println("Accumulator: Sum= "+ sum + " Person= " + p);
return sum += p.age;
},
(sum1, sum2) -> {
System.out.format("Combiner: Sum1= " + sum1 + " Sum2= "+ sum2);
return sum1 + sum2;
但实际情况是 Combiner 没有被执行。我不明白这背后的原因。 这是我的输出..
Accumulator: Sum= 0 Person= Max
Accumulator: Sum= 18 Person= Peter
Accumulator: Sum= 41 Person= Pamela
Accumulator: Sum= 64 Person= David
Accumulator: Sum= 76 Person= Pam
但是,没有编译错误,也没有异常,我的输出完全正确,与我预期的一样。但是没明白为什么combiner没有执行。
Combiner 仅针对并行流执行。
如果要使用组合器
,则需要使用parallelStream
而不是 stream