采取以下示例代码行:
Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet());
我想要一个HashSet。将调试器用于代码,我确实得到了HashSet。我看了看java.util.stream.Collectors.toSet()下面的代码:
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,实施决定a HashSet; 似乎是合理的。但是,我的实现需要a HashSet而不是仅任何old 保证的恒定时间查找Set。如果的实现toSet()决定说a FooSet,而该实现完全在其权限之内,那么我的实现就会受到影响。
Set
toSet()
FooSet
解决此问题的最佳实践是什么?
如果您想要保证HashSet,请使用Collectors.toCollection(HashSet::new)。
Collectors.toCollection(HashSet::new)