ejemplo java java-8 java-stream collectors

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?