我不明白以下方法的第三个参数的效用:
<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;
如您所见,未使用参数combiner
。例如,以下内容将字符串累积到ArrayList中:
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add,
ArrayList::addAll);
但我期待这个:
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add );
答案 0 :(得分:14)
当combiner
并行时使用Stream
,因为在这种情况下,多个线程会将Stream
的元素收集到最终输出ArrayList
的子列表中,并且必须将这些子列表组合起来以产生最终的ArrayList
。