gpt4 book ai didi

java-8 - stream().collect(Collectors.toSet()) vs stream().distinct().collect(Collectors.toList())

转载 作者:行者123 更新时间:2023-12-04 22:18:28 26 4
gpt4 key购买 nike

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

最佳答案

虽然答案很明显 - 不要为这少量元素的速度和内存消耗的这些细节以及返回 Set 的事实而烦恼。另一个是 List ;有一些有趣的小细节(有趣的 IMO)。

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

如果您从 List 流式传输(这是按设计排序的)并且没有改变顺序的中间操作(例如 unordered),.distinct()通过使用 LinkedHashSet 将强制保留顺序内部 - 相当昂贵。

如果你在做并行处理,list.stream().collect(Collectors.toSet())版本会合并多个 HashSet s(在 9 中与 8 相比略有改进),.distinct()另一方面,将旋转 ConcurrentHashMap这将保留所有 key 与虚拟 Boolean.TRUE值(它也在做一些有趣的事情来保留您的流可能具有的 null - 即使在两种情况下内部处理方式也不同)

关于java-8 - stream().collect(Collectors.toSet()) vs stream().distinct().collect(Collectors.toList()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994190/

26 4 0