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).