Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Karten- und FlatMap-Operationen in der Java8 Stream API

Detaillierte Erläuterung der Karten- und FlatMap-Operationen in der Java8 Stream API

青灯夜游
青灯夜游nach vorne
2019-11-27 17:50:384252Durchsuche

Detaillierte Erläuterung der Karten- und FlatMap-Operationen in der Java8 Stream API

1. Vorwort

Java 8 bietet einen sehr einfach zu bedienenden Stream API, Sammlungen können leicht manipuliert werden. Heute besprechen wir zwei Stream Zwischenoperationen map(Function super T, ? extends R> mapper) und flatMap(Function super T, ? extends Stream extends R>> mapper)

[Empfohlenes Lernen: Java-Video-Tutorial]

2. Die Kartenoperation

map besteht darin, die Elemente im Stream erneut zu verarbeiten, um einen neuen Stream zu bilden. Dies ist in der Entwicklung nützlich. Wir haben beispielsweise eine Studentensammlung, aus der wir das Alter der Studenten extrahieren müssen, um die Altersverteilungskurve der Studenten zu analysieren.
wird vor Java 8 platziert. Wir werden das Altersattribut im Element nutzen, indem wir eine neue Sammlung erstellen und dann die Studentensammlung durchlaufen. Jetzt haben wir diese Anforderung durch einen sehr einfachen Streaming-Vorgang erfüllt.

Schematische Darstellung:

Detaillierte Erläuterung der Karten- und FlatMap-Operationen in der Java8 Stream API

Entsprechender Pseudocode:

 // 伪代码
 List<integer> ages=studentList.stream().map(Student::getAge).collect(Collectors.toList());</integer>

3. flatMap-Operation

Anhand des obigen Beispiels sollte die map-Operation sehr einfach zu verstehen sein. Was macht flatMap also? Auf diese Weise ändern wir das obige Beispiel. Wenn es auf der Klasse basiert, extrahieren wir das Alter aller Schüler in allen Klassen, um die Altersverteilungskurve der Schüler zu analysieren. Ist es für uns zum jetzigen Zeitpunkt noch möglich, die oben beschriebene Methode zu verwenden?

 List<list>> studentGroup= gradeList.stream().map(Grade::getStudents).collect(Collectors.toList());</list>

Durch den obigen Vorgang können wir nur den Satz der Schülersätze in jeder Klasse erhalten List<list>></list>. Wir benötigen auch verschachtelte Schleifen, um die Altersdaten des Schülers zu erhalten, was sehr unpraktisch ist. Es wäre viel praktischer, wenn wir die Sammlung aller Schüler zurückgeben könnten List<students></students>. Das stimmt! flatMap Es ist machbar!

 // flatMap 提取 List<students>  map 提取年龄
 List<integer> ages = grades.stream().flatMap(grade -> grade.getStudents().stream()).map(Student::getAge).collect(Collectors.toList());</integer></students>

Wie im obigen Pseudocode gezeigt, verwenden wir flatMap, um alle Schüler zusammenzubringen. Verwenden Sie dann die Operation map, um das Alter zu extrahieren. flatMap unterscheidet sich von map darin, dass map nur Attribute extrahiert und in einen Stream einfügt, während flatMap zuerst Attribute extrahiert und in einen kleineren Stream einfügt und dann alle Streams zu einem Stream zusammenführt. Es entsteht das Gefühl, „Sand zu einem Turm zu sammeln“.

Zeichnen Sie ein weiteres Bild, um Ihr Verständnis zu vertiefen:

Detaillierte Erläuterung der Karten- und FlatMap-Operationen in der Java8 Stream API

4. Zusammenfassung

-Operationen und map-Operationen vertraut sind, können Sie einige Probleme mit Datenflussoperationen sehr einfach lösen. Um Ihr Wissen zu erweitern: In Java 8 gibt es diese beiden Operationen nicht nur in Stream, sondern auch in flatMap, und ihre Funktionen sind ähnlich. Optional<t></t>

Dieser Artikel stammt aus der Rubrik

Java-Einführung, willkommen zum Lernen!

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Karten- und FlatMap-Operationen in der Java8 Stream API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen