Java stream()&;并行流()。为什么API开发人员使用两种方法?

Java stream()&;并行流()。为什么API开发人员使用两种方法?,java,java-stream,Java,Java Stream,我最近仔细研究了Java8流API,发现有两种方法:stream()和parallelStream() 我理解每种方法的目的,但不理解需要两种方法来达到目的。通过公开两种方法,Java语言设计人员在编译时强制选择并行化(或非并行化) 显然,使用参数/开关有助于将选择推迟到运行时使用一些运行时参数/config和DI,这在许多上下文中都是可取的。然而,设计师们一定有令人信服的理由不走这条路。这些原因是什么?这将有助于了解流在幕后是如何工作的。您通常不希望在运行时进行选择:有些问题应该并行解决,有些

我最近仔细研究了Java8流API,发现有两种方法:stream()parallelStream()

我理解每种方法的目的,但不理解需要两种方法来达到目的。通过公开两种方法,Java语言设计人员在编译时强制选择并行化(或非并行化)


显然,使用参数/开关有助于将选择推迟到运行时使用一些运行时参数/config和DI,这在许多上下文中都是可取的。然而,设计师们一定有令人信服的理由不走这条路。这些原因是什么?这将有助于了解流在幕后是如何工作的。

您通常不希望在运行时进行选择:有些问题应该并行解决,有些问题不应该并行解决。在99.99%的情况下,他们不应该这样做

如果遇到这种情况,Java有if语句或三元运算符:

Stream<Foo> stream = shouldBeParallel? collection.parallelStream() : collection.stream();
Stream=应该并行吗?collection.parallelStream():collection.stream();

我不希望每次需要流时都必须写和读
collection.stream(false)
(这是什么意思?)或
collection.stream(StreamMode.SEQUENTIAL)

不需要额外的参数来指示它是否并行。已有方法
stream.parallel()
。就我个人而言,我甚至不知道存在
parallelStream()
,我总是使用
stream().parallel()