Collectors.toSet () und HashSet
Nehmen Sie die folgende Zeile des Beispielcodes:
Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet());
Ich will einHashSet
. Wenn ich einen Debugger zum Code nehme, erhalte ich tatsächlich einHashSet
. Ich habe mir @ angesehjava.util.stream.Collectors.toSet()
, um den folgenden Code zu beachten:
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);
}
Der Vertrag garantiert a Set
, und die Implementierung entscheidet sich für einHashSet
; scheint vernünftig. Meine Implementierung benötigt jedoch die konstante Zeitsuche, die durch ein @ garantiert wirHashSet
, nicht irgendein altesSet
. Wenn die Implementierung vontoSet()
beschließt, say a @ zu verwendFooSet
, was vollkommen im Rahmen seiner Rechte liegt, ist meine Implementierung gefährdet.
Was ist die Best-Practice-Lösung für dieses Problem?