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