我一直对Collections.parallelStream()
和Collections.stream().parallel()
之间的差异感到好奇。根据Javadocs,parallelStream()
尝试返回并行流,而stream().parallel()
返回并行流。通过我自己的测试,我发现没有差异。这两种方法的区别在哪里?一种实现比另一种实现更省时吗?谢谢。
最佳答案
即使目前他们的行为相同,也存在差异-至少如您正确指出的那样,它们在文档中有所不同。据我所知,将来可能会被利用。
目前,parallelStream
接口(interface)中的Collection
方法定义为:
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
作为默认方法,它可能会在实现中被覆盖(这就是
Collections
内部类的实际作用)。这暗示即使默认方法返回并行Stream,也可能存在Collections重写此方法以返回
non-parallel Stream
。这就是文档可能就是这样的原因。同时,即使
parallelStream
返回顺序流-它仍然是Stream
,然后您可以轻松地在其上调用parallel
: Collections.some()
.parallelStream() // actually sequential
.parallel() // force it to be parallel
至少对我来说,这看起来很奇怪。
似乎该文档应该以某种方式声明在调用
parallelStream
之后,没有理由再次调用parallel
来强制这样做-因为这可能对处理没有用甚至有害。编辑
对于阅读此书的任何人,请同时阅读Holger的评论;它涵盖了我在此答案中未说过的情况。