采取以下示例代码行:
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
,实施决定a HashSet
; 似乎是合理的。但是,我的实现需要aHashSet
而不是仅任何old保证的恒定时间查找Set
。如果的实现toSet()
决定使用FooSet
完全在其权限范围内的a ,则我的实现受到了损害。
解决此问题的最佳实践是什么?