Kolekcjonerów.toSet () i HashSet
Weź następujący wiersz kodu próbki:
Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet());
Chcę HashSet
. Biorąc debuggera do kodu, rzeczywiście dostaję HashSet
. Spojrzałem na java.util.stream.Collectors.toSet()
, aby przestrzegać następującego kodu:
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);
}
Umowa gwarantuje a Set
, a realizacja decyduje o HashSet
; wydaje się rozsądna. Jednak moja implementacja wymaga stałego Wyszukiwania czasu gwarantowanego przez HashSet
, a nie jakieś stare Set
. Jeśli implementacja toSet()
zdecyduje się użyć FooSet
, co jest całkowicie w ramach swoich praw, moje wdrożenie jest zagrożone.
Jakie jest najlepsze rozwiązanie tego problemu?
49
Author: Robert Bain, 2015-05-06
1 answers
Jeśli chcesz mieć gwarancję HashSet
, użyj Collectors.toCollection(HashSet::new)
.
77
Author: Tagir Valeev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-06 16:39:47
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-06 16:39:47