Saltar al contenido

¿Cómo puedo convertir una lista de listas en una lista en Java 8?

Solución:

Puedes usar flatMap para aplanar las listas internas (después de convertirlas en Streams) en un solo Stream y luego recopilar el resultado en una lista:

List<List<Object>> list = ...
List<Object> flat = 
    list.stream()
        .flatMap(List::stream)
        .collect(Collectors.toList());

flatmap es mejor, pero hay otras formas de lograr lo mismo

List<List<Object>> listOfList = ... // fill

List<Object> collect = 
      listOfList.stream()
                .collect(ArrayList::new, List::addAll, List::addAll);

los flatMap método en Stream ciertamente puede aplanar esas listas, pero debe crear Stream objetos por elemento, luego un Stream por el resultado.

No necesitas todos esos Stream objetos. Aquí está el código simple y conciso para realizar la tarea.

// listOfLists is a List<List<Object>>.
List<Object> result = new ArrayList<>();
listOfLists.forEach(result::addAll);

Porque un List es Iterable, este código llama al forEach método (función Java 8), que se hereda de Iterable.

Realiza la acción dada para cada elemento del Iterable hasta que se hayan procesado todos los elementos o la acción arroje una excepción. Las acciones se realizan en el orden de iteración, si se especifica ese orden.

Y un List‘s Iterator devuelve artículos en orden secuencial.

Para el Consumer, este código pasa una referencia de método (característica de Java 8) al método anterior a Java 8 List.addAll para agregar los elementos de la lista interna secuencialmente.

Agrega todos los elementos de la colección especificada al final de esta lista, en el orden en que son devueltos por el iterador de la colección especificada (operación opcional).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *