Java Unordered() 函数

Man*_*Kbk 2 java java-8 java-stream

在java 8中,当我这样做时,

类型1

list.stream().parallel().map(/**/).unordered().filter(/**/).collect(/**/);
Run Code Online (Sandbox Code Playgroud)

2型

list.stream().parallel().unordered().map(/**/).filter(/**/).collect(/**/);
Run Code Online (Sandbox Code Playgroud)

由于两个流都是并行的,我可以理解每个操作(如过滤器、映射等)的所有对象将并行执行,但操作本身将按照定义的顺序顺序执行。

问题

1.在Type1中,我确实在map()操作之后说unordered()。那么,map() 操作是否尝试处理“排序”,因为它位于 unOrdered() 之前?

2.在Type2中,排序不是跨地图维护的,过滤器操作对吗?我的理解正确吗?

And*_*eas 5

Stream状态修改方法有3种:

  • sequential()

    返回一个等效的连续流。可能会返回自身,因为流已经是顺序的,或者因为基础流状态已修改为顺序的。

  • parallel()

    返回一个等效的并行流。可能会返回自身,因为流已经是并行的,或者因为底层流状态已修改为并行。

  • unordered()

    返回一个等效的无序流。可能会返回自身,因为流已经是无序的,或者因为基础流状态被修改为无序。

正如您所看到的,这三个方法都可能会修改底层流状态,这意味着方法在流链中的位置并不重要。

你的两个例子是一样的。那么这些将是:

list.stream().parallel().map(/**/).filter(/**/).unordered().collect(/**/);

list.stream().map(/**/).filter(/**/).unordered().parallel().collect(/**/);

list.stream().unordered().map(/**/).parallel().filter(/**/).collect(/**/);

list.stream().unordered().parallel().map(/**/).filter(/**/).collect(/**/);
Run Code Online (Sandbox Code Playgroud)

您应该单击无序链接并阅读 javadoc 以了解有关流排序的更多信息。