Si tengo una List<List<Object>>
, ¿cómo puedo convertirla en una List<Object>
que contenga todos los objetos en el mismo orden de iteración utilizando las características de Java 8?
java
collections
java-8
Sarah Szabo
fuente
fuente
::
:)Class::method
Al principio se siente un poco extraño, pero tiene la ventaja de que declara desde qué tipo de objeto está mapeando. Eso es algo que de lo contrario se pierde en las transmisiones.flatmap
es mejor pero hay otras formas de lograr lo mismofuente
El
flatMap
métodoStream
activado puede aplanar esas listas por usted, pero debe crearStream
objetos para el elemento y luegoStream
para el resultado.No necesitas todos esos
Stream
objetos. Aquí está el código simple y conciso para realizar la tarea.Como
List
esIterable
, este código llama alforEach
método (característica Java 8), que se hereda deIterable
.Y una
List
'sIterator
devuelve los artículos en orden secuencial.Para el
Consumer
, este código pasa en una referencia de método (característica de Java 8) al método anterior a Java 8List.addAll
para agregar los elementos de la lista interna secuencialmente.fuente
Puede usar el
flatCollect()
patrón de las colecciones de Eclipse .Si no puede cambiar la lista de
List
:Nota: Soy colaborador de Eclipse Collections.
fuente
Tal como mencionó @Saravana:
En resumen, hay varias formas de lograr lo mismo de la siguiente manera:
fuente
Sólo quiero explicar un escenario más bien
List<Documents>
, esta lista contiene unas cuantas listas de otros documentos comoList<Excel>
,List<Word>
,List<PowerPoint>
. Entonces la estructura esAhora, si desea iterar Excel solo a partir de documentos, haga lo siguiente:
Entonces el código sería
Espero que esto pueda resolver el problema de alguien mientras se codifica ...
fuente
Podemos usar flatmap para esto, consulte el siguiente código:
fuente
Una expansión en la respuesta de Eran que fue la respuesta principal, si tienes un montón de capas de listas, puedes seguir mapeándolas.
Esto también viene con una forma práctica de filtrado a medida que baja las capas si es necesario también.
Así por ejemplo:
Esto sería similar en SQL a tener instrucciones SELECT dentro de las instrucciones SELECT.
fuente
Método para convertir un
List<List>
aList
:Ver este ejemplo:
Imprime:
fuente