【问题标题】:Collectors.toSet() and HashSetCollectors.toSet() 和 HashSet
【发布时间】:2020-06-12 01:13:10
【问题描述】:

取下面一行示例代码:

Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet());

我想要一个HashSet。对代码进行调试,我确实得到了HashSet。我查看了java.util.stream.Collectors.toSet() 以观察以下代码:

public static <T> Collector<T, ?, Set<T>> toSet() {
    return new CollectorImpl<>((Supplier<Set<T>>) HashSet::new, Set::add,
                               (left, right) -> { left.addAll(right); return left; },
                               CH_UNORDERED_ID);
}

合同保证Set,执行决定HashSet;似乎合理。但是,我的实现需要HashSet 保证的恒定时间查找,而不仅仅是任何旧的Set。如果toSet() 的实现决定使用FooSet,这完全在其权利范围内,那么我的实现就会受到影响。

解决这个问题的最佳实践方法是什么?

【问题讨论】:

    标签: java java-8 java-stream collectors


    【解决方案1】:

    如果您想要有保证的HashSet,请使用Collectors.toCollection(HashSet::new)

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2013-07-24
      • 2017-06-05
      • 2012-04-29
      相关资源
      最近更新 更多