Java 8 Stream - 减少函数的组合器没有被执行

标签 java java-8 java-stream reduce combiners

<分区>

我正在使用一个带有三个参数的简单 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 仅针对并行流执行。

关于Java 8 Stream - 减少函数的组合器没有被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40910619/

相关文章:

Java 8 : Lambda expression contains more than one statement/logic

android - Android 是否使用 minSdkVersion<24 对 Java 8 Iterable.forEach() 进行脱糖?

java - 使用流总结列表

java - 安卓 : External file in uiautomator

java - 我可以从客户端检测当前用户有权使用哪些 EJB 吗?

java - 如何使用 JPA 和 Hibernate 保留 OffsetTime 和 OffsetDateTime?

Java 8 Streams - 基于条件的迭代器映射和删除

带有列表值的 Java Map,在另一个列表上过滤

java - Maven:插件配置异常

java - 卡片布局 - java GUI