流().collect(Collectors.toSet()) vs 流().distinct().collect(Collectors.toList())

2024-03-22

如果我有一个对象列表(~200 个元素),其中只有很少的唯一对象(~20 个元素)。 我只想拥有独特的价值观。之间list.stream().collect(Collectors.toSet()) and list.stream().distinct().collect(Collectors.toList())哪个对于延迟和内存消耗更有效?


虽然答案非常明显 - 不要担心这些少量元素的速度和内存消耗的细节and事实上,一个人返回一个Set另一个List;有一些有趣的小细节(有趣的IMO)。

假设您正在从已知的源进行流式传输distinct,在这种情况下你的.distinct()操作将是 NO-OP;因为实际上不需要做任何事情。

如果您从List(这是按照设计顺序的)并且没有中间操作(unordered例如)改变顺序,.distinct()将被迫保留订单,通过使用LinkedHashSet内部 - 相当昂贵。

如果您正在进行并行处理,list.stream().collect(Collectors.toSet())版本将合并多个HashSets(在 9 中,这比 8 略有改进),.distinct()另一方面,将旋转ConcurrentHashMap这将用一个假钥匙来保存所有钥匙Boolean.TRUE价值(它也做了一些有趣的事情来保存null您的流可能有 - 即使在两种情况下内部处理方式也不同)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流().collect(Collectors.toSet()) vs 流().distinct().collect(Collectors.toList()) 的相关文章

随机推荐