我一直很好奇 Collections.parallelStream()
和 Collections.stream().parallel()
之间的区别。根据 Javadocs, parallelStream()
尝试返回并行流,而 stream().parallel()
返回并行流。通过我自己的一些测试,我没有发现任何差异。这两种方式的区别在哪里呢?一种实施方式是否比另一种更省时?谢谢。
原文由 Nick Clark 发布,翻译遵循 CC BY-SA 4.0 许可协议
我一直很好奇 Collections.parallelStream()
和 Collections.stream().parallel()
之间的区别。根据 Javadocs, parallelStream()
尝试返回并行流,而 stream().parallel()
返回并行流。通过我自己的一些测试,我没有发现任何差异。这两种方式的区别在哪里呢?一种实施方式是否比另一种更省时?谢谢。
原文由 Nick Clark 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答1.6k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答2k 阅读
2 回答786 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
即使他们 目前的 行为相同,也存在差异 - 至少在他们的文档中,正如您正确指出的那样;据我所知,将来可能会被利用。
目前
parallelStream
方法在Collection
接口中定义为:作为默认方法,它可以在实现中被覆盖(这就是
Collections
内部类实际上所做的)。这暗示即使默认方法返回并行流,也可能有覆盖此方法的集合返回
non-parallel Stream
。这就是文档可能是这样的原因。同时, 即使
parallelStream
返回一个顺序流 - 它仍然是一个Stream
,然后你可以轻松调用parallel
:至少对我来说,这看起来很奇怪。
似乎文档应该以某种方式声明在调用
parallelStream
之后应该没有理由再次调用parallel
来强制执行 - 因为它可能对处理无用甚至不利。编辑
对于阅读本文的任何人 - 请同时阅读 Holger 的评论;它涵盖了超出我在此答案中所说的情况。