java - ejemplo - Collectors.toSet() y HashSet
java stream filter get list (1)
Si desea un HashSet
garantizado, use Collectors.toCollection(HashSet::new)
.
Tome la siguiente línea de código de ejemplo:
Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet());
Quiero un HashSet
. Tomando un depurador para el código, de hecho estoy obteniendo un HashSet
. java.util.stream.Collectors.toSet()
un vistazo a java.util.stream.Collectors.toSet()
para observar el siguiente código:
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);
}
El contrato garantiza un Set
, y la implementación decide sobre un HashSet
; parece razonable. Sin embargo, mi implementación necesita la búsqueda de tiempo constante garantizada por un HashSet
, no solo un Set
antiguo. Si la implementación de toSet()
decide usar, por ejemplo, un FooSet
, que está perfectamente dentro de sus derechos, mi implementación se ve comprometida.
¿Cuál es la solución de la mejor práctica para este problema?