サンプルコードの次の行を使用します。
_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
が必要な場合は、 Collectors.toCollection(HashSet::new)
を使用します。