采取以下示例代码行:
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);
}
合同保证 a Set
,并且实施决定HashSet
;看起来很合理。然而,我的实现需要由一个保证的恒定时间查找HashSet
,不只是任何旧的Set
。如果实施toSet()
决定使用说FooSet
,这完全在其权利范围内,但我的实施受到了损害。
这个问题的最佳实践解决方案是什么?
如果你想要有保证HashSet
, use Collectors.toCollection(HashSet::new) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#toCollection-java.util.function.Supplier-.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)