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

类型1

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


2型

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


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

问题

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

2.在Type2中,未在整个地图上维护订购,过滤器操作对吗?我的理解正确吗?

最佳答案

有3种Stream状态修改方法:


sequential()


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

parallel()


返回并行的等效流。可能由于流已经是并行的,或者因为基础流的状态已被修改为并行而返回自身。

unordered()


返回等于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(/**/);


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

关于java - Java Unordered()函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56516407/

10-12 05:25