【发布时间】:2021-05-31 08:43:04
【问题描述】:
谁能告诉我为什么会发生这种情况以及这是预期的行为还是错误
List<Integer> a = Arrays.asList(1,1,3,3);
a.parallelStream().filter(Objects::nonNull)
.filter(value -> value > 2)
.reduce(1,Integer::sum)
回答:10
但如果我们使用 stream 而不是 parallelStream 我得到了正确和预期 answer 7
【问题讨论】:
-
检查documentation of
reduce: "...标识值必须是累加器函数的标识。这意味着对于所有x,accumulator.apply(identity, x)是相等的到x..." - 不是1和Integer::sum -
为了能够使用并行流,减少是分部分完成的,每个部分都添加一个(可能每个元素一次) - 尝试使用
0,结果应该是正确的跨度>
标签: java filter stream reduce parallelstream