Wenn ich eine habe List<List<Object>>
, wie kann ich daraus eine machen List<Object>
, die alle Objekte in derselben Iterationsreihenfolge enthält, indem ich die Funktionen von Java 8 verwende?
java
collections
java-8
Sarah Szabo
quelle
quelle
::
:)Class::method
fühlt sich anfangs etwas komisch an, hat aber den Vorteil, dass es deklariert, von welcher Art von Objekt Sie ein Mapping durchführen. Das ist etwas, was Sie sonst in Streams verlieren.flatmap
ist besser, aber es gibt andere Möglichkeiten, das gleiche zu erreichenquelle
Die
flatMap
Methode onStream
kann diese Listen sicherlich für Sie reduzieren, muss jedochStream
Objekte für das Element und dann aStream
für das Ergebnis erstellen .Sie brauchen nicht alle diese
Stream
Objekte. Hier ist der einfache, präzise Code zur Ausführung der Aufgabe.Da a
List
is istIterable
, ruft dieser Code dieforEach
Methode (Java 8-Funktion) auf, von der geerbt wirdIterable
.Und a
List
'sIterator
gibt Artikel in sequentieller Reihenfolge zurück.Für den
Consumer
Code wird eine Methodenreferenz (Java 8-Funktion) an die Methode vor Java 8 übergebenList.addAll
, um die inneren Listenelemente nacheinander hinzuzufügen.quelle
Sie können das
flatCollect()
Muster aus Eclipse-Sammlungen verwenden .Wenn Sie die Liste nicht ändern können von
List
:Hinweis: Ich bin ein Mitarbeiter von Eclipse Collections.
quelle
Genau wie @Saravana erwähnt hat:
Zusammenfassend gibt es verschiedene Möglichkeiten, um dasselbe zu erreichen:
quelle
Ich möchte nur ein weiteres Szenario wie erklären
List<Documents>
, diese Liste enthält einige weitere Listen anderer Dokumente wieList<Excel>
,List<Word>
,List<PowerPoint>
. Die Struktur ist alsoWenn Sie Excel nur aus Dokumenten iterieren möchten, gehen Sie wie folgt vor.
Der Code wäre also
Ich hoffe, dies kann jemandes Problem beim Codieren lösen ...
quelle
Wir können hierfür Flatmap verwenden, siehe folgenden Code:
quelle
Eine Erweiterung von Erans Antwort, die die beste Antwort war. Wenn Sie mehrere Listenebenen haben, können Sie diese weiterhin flach abbilden.
Dies bietet auch eine praktische Möglichkeit zum Filtern, wenn Sie bei Bedarf auch die Ebenen herunterfahren.
Also zum Beispiel:
Dies ähnelt in SQL SELECT-Anweisungen in SELECT-Anweisungen.
quelle
Methode zum Konvertieren von a
List<List>
inList
:Siehe dieses Beispiel:
Es druckt:
quelle