Java Unordered() 函数

标签 java java-8 java-stream

在 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中,Ordering is not maintained across map, filter ops right?我的理解正确吗?

最佳答案

Stream 状态修改方法有 3 种:

  • sequential()

    Returns an equivalent stream that is sequential. May return itself, either because the stream was already sequential, or because the underlying stream state was modified to be sequential.

  • parallel()

    Returns an equivalent stream that is parallel. May return itself, either because the stream was already parallel, or because the underlying stream state was modified to be parallel.

  • unordered()

    Returns an equivalent stream that is unordered. May return itself, either because the stream was already unordered, or because the underlying stream state was modified to be 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 Unordered() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516407/

相关文章:

java - 如果要使用子类型的属性,如何防止显式转换?

java - 使用 Jackson 和 Json-View 排除 json 中的字段

java - 如何实现返回压缩流的 Java 8 通用方法,其中两个流中的对象依次出现?

java - 如何从 lambda 表达式中收集列表

java - 如何使用 Java 8 流按 block 读取文本文件

java - 类路径变量以路径分隔符结尾更好还是没有路径分隔符更好?

java - 如何选择 JList 中的两个索引以及 JComboBox 中的两个项目?

java - 生成 boolean 流

lambda - Java 8 Lambda 表达式中的分组依据

java - 如何对给定的字符串模式使用 Java 正则表达式或 Java 流并从中创建映射