java - 是否值得将 distinct() 与 collect(toSet()) 一起使用

标签 java java-stream

将流的元素收集到集合中时,在流上指定 .distinct() 是否有任何优点(或缺点)?例如:

return items.stream().map(...).distinct().collect(toSet());

鉴于该集合已经删除了重复项,这似乎是多余的,但它是否提供了任何性能优势或劣势?答案是否取决于流是并行/顺序还是有序/无序?

最佳答案

根据javadoc , distinct 是一个有状态的中间操作。

如果您确实有 .distinct 紧跟 .collect,它实际上并没有增加任何好处。也许如果 .distinct 实现比 Set 重复检查更高效,你可能会得到一些好处,但如果你收集到一个集合,你将结束无论如何都会得到相同的结果。

另一方面,如果 .distinct 发生在您的 .map 操作之前,并且该特定映射是一项昂贵的操作,您可能会在那里获得一些 yield ,因为您'总体上处理的数据较少。

关于java - 是否值得将 distinct() 与 collect(toSet()) 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593538/

相关文章:

java - Apache PDFBox Java 库 - 文本未渲染

java - 升级到 Hibernate 4.3.4 主要方法永远不会终止 JVM 未完成

java - 获取数组错误和流条件的键

java-8 - Java 流 - 从列表中的每个对象调用方法

java - 数据流的 Saxon 实现

Java Swing 类无法转换为 DefaultListModel

java - 使用 Java 流移除和收集元素

Java流无法识别类型

casting - Java 8 - 使用外部参数过滤集合

java - Log4J - J2EE - 动态变量