Teniendo en cuenta que tenemos Set<String> stringSet
, podemos usar lo siguiente:
Java 10 (lista no modificable)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Listas modificables)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Según el documento para el métodotoList()
No hay garantías sobre el tipo, mutabilidad, serialización o seguridad de subprocesos de la Lista devuelta; Si se requiere un mayor control sobre la Lista devuelta, use toCollection (Proveedor).
Entonces, si necesitamos una implementación específica, por ejemplo ArrayList
, podemos obtenerla de esta manera:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Listas no modificables)
Podemos hacer uso del Collections::unmodifiableList
método y ajustar la lista devuelta en ejemplos anteriores. También podemos escribir nuestro propio método personalizado como:
class ImmutableCollector {
public static <T> Collector<T, List<T>, List<T>> toImmutableList(Supplier<List<T>> supplier) {
return Collector.of( supplier, List::add, (left, right) -> {
left.addAll(right);
return left;
}, Collections::unmodifiableList);
}
}
Y luego úsalo como:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Otra posibilidad es hacer uso del collectingAndThen
método que permite realizar una transformación final antes de devolver el resultado:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Un punto a tener en cuenta es que el método Collections::unmodifiableList
devuelve una vista no modificable de la lista especificada, según el documento . Una colección de vistas no modificables es una colección que no se puede modificar y también es una vista de una colección de respaldo. Tenga en cuenta que los cambios en la colección de respaldo aún podrían ser posibles, y si ocurren, son visibles a través de la vista no modificable. Pero el método del recopilador Collectors.unmodifiableList
devuelve una lista verdaderamente inmutable en Java 10 .
java.util.Collection
: O (0)