我一直很好奇Collections.parallelStream()和之间的区别Collections.stream().parallel().根据Javadocs,parallelStream()尝试返回并行流,而stream().parallel()返回并行流.通过对我自己的一些测试,我发现没有差异.这两种方法的区别在哪里?一个实现比另一个更有效吗?谢谢.
Eug*_*ene 17
即使他们采取同样的时刻,是有区别的-至少他们的文档中,你正确指出的; 据我所知,未来可能会被利用.
目前,该parallelStream方法在Collection界面中定义为:
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
Run Code Online (Sandbox Code Playgroud)
作为一种默认方法,它可以在实现中被覆盖(这就是Collections内部类实际上做的事情).
这暗示即使默认方法返回并行Stream,也可能有覆盖此方法的Collections返回a non-parallel Stream.这就是文档可能是这样的原因.
同时,即使当parallelStream收益连续流-它仍然是一个Stream; 然后你可以轻松地打电话parallel给它:
Collections.some()
.parallelStream() // actually sequential
.parallel() // force it to be parallel
Run Code Online (Sandbox Code Playgroud)
至少对我来说这看起来很怪异.
似乎文档应该以某种方式说明在调用parallelStream之后应该没有理由parallel再次强制调用- 因为它可能对处理无用甚至不好.
编辑
对于阅读此内容的任何人 - 请阅读Holger的评论; 它涵盖的范围超出了我在这个答案中的说法.
Collections.parallelStream()和之间没有区别Collections.stream().parallel().它们都会将流划分为底层分裂器允许的范围,并且它们都将使用默认的ForkJoinPool运行(除非已在另一个内部运行).
| 归档时间: |
|
| 查看次数: |
8812 次 |
| 最近记录: |