相关疑难解决方法(0)

哪里定义了收集组合器(供应商,累加器,组合器)的组合顺序?

Java API文档声明combinercollect方法的参数必须是:

用于组合两个值的关联,非干扰,无状态函数,它必须与累加器函数兼容

A combinerBiConsumer<R,R>接收两个类型的参数R并返回void.但是文档没有说明我们是否应该将元素组合到第一个或第二个参数中?

例如,以下示例可以给出不同的结果,取决于组合的顺序是: m1.addAll(m2)m2.addAll(m1).

List<String> res = LongStream
     .rangeClosed(1, 1_000_000)
     .parallel()
     .mapToObj(n -> "" + n)
     .collect(ArrayList::new, ArrayList::add,(m1, m2) -> m1.addAll(m2));
Run Code Online (Sandbox Code Playgroud)

我知道在这种情况下我们可以简单地使用方法句柄,例如ArrayList::addAll.然而,在某些情况下需要Lambda并且我们必须以正确的顺序组合项目,否则我们可能在并行处理时得到不一致的结果.

这是否在Java 8 API文档的任何部分中声明了?或者它真的没关系?

java java-8 java-stream

9
推荐指数
2
解决办法
256
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1