java - 遇到订单集合 - 最佳实践和示例

标签 java java-8 java-stream spliterator

Ordering

Streams may or may not have a defined encounter order. Whether or not a stream has an encounter order depends on the source and the intermediate operations. Certain stream sources (such as List or arrays) are intrinsically ordered, whereas others (such as HashSet) are not. Some intermediate operations, such as sorted(), may impose an encounter order on an otherwise unordered stream, and others may render an ordered stream unordered, such as BaseStream.unordered(). Further, some terminal operations may ignore encounter order, such as forEach().

  1. HashSet 外,是否还有其他类型不具有 encounter order 属性?
  2. 如果我对保持现有顺序或任何排序不感兴趣,显式调用 unordered 中间操作是否被认为是最佳实践将并行计算的每个流?

最佳答案

除了HashSetHashMap的 Collection View ,Stream.generate()将生成无序流。

不用说,Random 生成的流也是无序的。此外,Stream.empty() 没有报告遇到顺序,但这并没有太大的后果......

如果您知道您不需要 Stream 来维护相遇顺序,那么使用 unordered() 是一个很好的做法——即使它不会提高性能,就像大多数情况一样当前实现中的操作,它不会造成伤害,并且会记录您不关心订单。这不仅适用于并行流,一些操作,如 distinct(),即使在顺序情况下也可能受益于无序性。

在某些情况下,选择正确的终端操作,如 findAny() 而不是 findFirst() 文档,意图更简洁,也会对文档产生更高的影响性能,给定当前的实现。

关于java - 遇到订单集合 - 最佳实践和示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333593/

相关文章:

java - WCF 服务始终在响应正文中返回随机数

java - 从命令行绑定(bind)变量来测试 groovy 脚本

java - 为什么不调用 java.util.stream.Stream#close()?

javafx - 如何为 JavaFX 编写 KeyListener

java - 静态或非静态方法中的 JUnit 测试数据

java - 什么时候认为 Java 8 Stream 被消费了?

Java 8 并行排序与 Scala 并行排序

java - Spring可以处理POJO吗?

java - 是否有针对 IBM420_rtl 的 Java 字符集实现?

java - 当代码具有不完整的 java doc 标记时,Maven 站点因 Java 8 而失败