1

我正在使用一个带有三个参数的简单 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;

但是正在发生的事情是组合器没有被执行。我不明白这背后的原因。这是我的输出..

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

但是,没有编译错误,也没有异常,我的输出完全正确,与我的预期相同。但不明白为什么组合器没有执行。

4

2 回答 2

8

组合器仅针对并行流执行。

于 2016-12-01T12:40:45.503 回答
0

如果要使用组合器,则需要使用parallelStream而不是stream

于 2016-12-01T12:56:42.687 回答