¿Cómo puedo convertir una Lista de Listas en una Lista en Java 8?

Resuelto Sarah Szabo asked hace 10 años • 12 respuestas

Si tengo un List<List<Object>>, ¿cómo puedo convertirlo en un List<Object>que contenga todos los objetos en el mismo orden de iteración utilizando las funciones de Java 8?

Sarah Szabo avatar Aug 06 '14 02:08 Sarah Szabo
Aceptado

Puede utilizar flatMappara aplanar las listas internas (después de convertirlas en Streams) en una sola Stream y luego recopilar el resultado en una lista:

List<List<Object>> list = ...
List<Object> flat = 
    list.stream()
        .flatMap(List::stream)
        .collect(Collectors.toList());
Eran avatar Aug 05 '2014 19:08 Eran

El flatMapmétodo on Streamciertamente puede aplanar esas listas por usted, pero debe crear Streamobjetos para el elemento y luego a Streampara el resultado.

No necesitas todos esos Streamobjetos. 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);

Debido a que a Listes Iterable, este código llama al forEachmétodo (función de Java 8), que se hereda de Iterable.

Realiza la acción dada para cada elemento de Iterablehasta que todos los elementos hayan sido procesados ​​o la acción genere una excepción. Las acciones se realizan en el orden de iteración, si ese orden se especifica.

Y a Listdevuelve Iteratorlos artículos en orden secuencial.

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

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

rgettman avatar May 11 '2018 23:05 rgettman