Stream.reduce
有 3 个方法重载。
reduce(BinaryOperator<T> accumulator)
reduce(T identity, BinaryOperator<T> accumulator)
reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)
- 例如,第一个重载可用于计算整数列表的总和。
- 第二次重载是相同的,但如果列表为空,则仅返回默认值。
我很难理解第三个重载(Stream.reduce(identity,accumulator,combiner)
)的工作原理以及它的用例是什么。那么,它是如何工作的,为什么会存在?
最佳答案
如果我理解正确的话,你的问题是关于第三个参数 combiner
.
首先,Java 的目标之一是为顺序流和并行流提供类似的 API。
reduce
的 3 参数版本对于并行流很有用。
假设您要从 Collection<T>
的值减少至U
类型并且您正在使用并行流版本。并行流将集合 T 分成更小的流,并使用第二个函数为每个流生成 u' 值。但现在这些不同的 u' 值必须组合起来?它们如何结合?第三个函数是提供该逻辑的函数。
关于java - Stream.reduce(identity,accumulator,combiner)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75188237/