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?

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