Kac*_*hna 10 java java-8 java-stream
我不明白以下方法的第三个参数的效用:
<R> R collect(Supplier<R> supplier,
BiConsumer<R,? super T> accumulator,
BiConsumer<R,R> combiner)
Run Code Online (Sandbox Code Playgroud)
来自javaDoc:
这产生的结果相当于:
Run Code Online (Sandbox Code Playgroud)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);
Run Code Online (Sandbox Code Playgroud)
但我期待这个:
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add );
Run Code Online (Sandbox Code Playgroud)
Era*_*ran 17
在combiner使用时,你的Stream是平行的,因为在这种情况下,多个线程收集的元素Stream到最终输出的子列表ArrayList,并且这些子列表必须被组合以产生最终的ArrayList.
| 归档时间: |
|
| 查看次数: |
4435 次 |
| 最近记录: |