将流的元素收集到集合中时,是否还有.distinct()
在流上指定的优点(或缺点)?例如:
return items.stream().map(...).distinct().collect(toSet());
鉴于该集合已经删除了重复项,这似乎是多余的,但它是否提供任何性能优势或劣势?答案取决于流是并行/顺序还是有序/无序?
根据javadoc,distinct
是一个有状态的中间操作.
如果你真的已经.distinct
紧随其后.collect
,它并没有真正增加任何好处.也许如果.distinct
实现比Set
复制检查更高效,你可能会获得一些好处,但是如果你收集到一个集合,你最终会得到相同的结果.
另一方面,如果在操作.distinct
之前发生.map
,并且特定映射是一项昂贵的操作,那么您可能会获得一些收益,因为您整体上处理的数据较少.