Si j'ai un List<List<Object>>
, comment puis-je le transformer en un List<Object>
qui contient tous les objets dans le même ordre d'itération en utilisant les fonctionnalités de Java 8?
java
collections
java-8
Sarah Szabo
la source
la source
::
:)Class::method
se sent un peu bizarre au début, mais il a l'avantage de déclarer le type d'objet à partir duquel vous effectuez le mappage. C'est quelque chose que vous perdez autrement dans les flux.flatmap
c'est mieux mais il y a d'autres façons de faire la même chosela source
La
flatMap
méthode surStream
peut certainement aplatir ces listes pour vous, mais elle doit créer desStream
objets pour l'élément, puis unStream
pour le résultat.Vous n'avez pas besoin de tous ces
Stream
objets. Voici le code simple et concis pour effectuer la tâche.Parce que a
List
estIterable
, ce code appelle laforEach
méthode (fonctionnalité Java 8), héritée deIterable
.Et un
List
s »Iterator
articles de retours dans un ordre séquentiel.Pour le
Consumer
, ce code transmet une référence de méthode (fonctionnalité Java 8) à la méthode pré-Java 8List.addAll
pour ajouter séquentiellement les éléments de la liste interne.la source
Vous pouvez utiliser le
flatCollect()
modèle des collections Eclipse .Si vous ne pouvez pas modifier la liste depuis
List
:Remarque: je suis un contributeur aux collections Eclipse.
la source
Tout comme @Saravana l'a mentionné:
Pour résumer, il existe plusieurs façons d’obtenir les mêmes résultats comme suit:
la source
Je veux juste expliquer un scénario plutôt
List<Documents>
, cette liste contient quelques listes de plus d'autres documents commeList<Excel>
,List<Word>
,List<PowerPoint>
. La structure est doncMaintenant, si vous souhaitez itérer Excel uniquement à partir de documents, faites quelque chose comme ci-dessous.
Donc, le code serait
J'espère que cela peut résoudre le problème de quelqu'un lors du codage ...
la source
Nous pouvons utiliser une carte plate pour cela, veuillez vous référer au code ci-dessous:
la source
Une extension de la réponse d'Eran qui était la meilleure réponse, si vous avez un tas de couches de listes, vous pouvez continuer à les cartographier à plat.
Cela est également livré avec un moyen pratique de filtrer lorsque vous descendez les couches si nécessaire.
Ainsi, par exemple:
Cela serait similaire en SQL à avoir des instructions SELECT dans les instructions SELECT.
la source
Méthode pour convertir un
List<List>
enList
:Voir cet exemple:
Il imprime:
la source