java - Stream.reduce(identity,accumulator,combiner)如何工作?

标签 java java-stream

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/

相关文章:

Java 单例空指针异常

java - 有没有好的反模式来源?

java - 遍历名称以 "get"开头的所有方法 - 比较对象

java - 如何限制 Stream 顺序运行,并防止它并行运行?

Java - 按子列表大小对列表进行排序

Java 8 流:myList.stream().map(Foo::bar).collect(Collectors.toList()) 的简写

java - Android Listview 倒计时器导致奇怪的结果

java - 如何将堆栈跟踪打印到页面?

Java 8 多级 flatMap 最佳实现

java - 如果增加迭代次数,顺序流比并行流更快