关于收集(供应商、蓄能器、合路器)

2022-09-03 06:04:57

我不明白以下方法的第三个参数的效用:

<R> R collect(Supplier<R> supplier,
              BiConsumer<R,? super T> accumulator,
              BiConsumer<R,R> combiner)

来自 javaDoc

这将生成等效于以下内容的结果:

 R result = supplier.get();
 for (T element : this stream)
     accumulator.accept(result, element);
 return result;

如您所见,该参数未被使用。例如,以下内容会将字符串累积到 ArrayList 中:combiner

 List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add,
                                            ArrayList::addAll);

但我期望这个:

List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add );

答案 1

当您是并行的时使用,因为在这种情况下,几个线程将元素收集到最终输出的子列表中,并且必须将这些子列表组合在一起以产生最终的。combinerStreamStreamArrayListArrayList


答案 2

推荐