Zum Hauptinhalt springen

Wie unterscheiden sich Map- und Flatmap-Methoden in Java?

In der Programmiersprache Java haben wir zwei Methoden - map() und flatMap(), mit denen Elemente einer Sammlung oder eines Datenflusses konvertiert werden. Beide Methoden haben ähnliche Funktionen, aber es gibt einen Unterschied zwischen den beiden, den es wichtig ist zu verstehen.

Methode map() akzeptiert eine Funktion und wendet sie auf jedes Element in einer Auflistung oder einem Datenfluss an. Diese Funktion kann verwendet werden, um den Typ zu ändern, Werte zu konvertieren oder andere Operationen an Elementen durchzuführen. Das Ergebnis der map() -Methode ist eine neue Sammlung oder ein Datenfluss mit geänderten Elementen.

Methode flatMap() hat eine ähnliche Funktionalität, aber mit einigen Unterschieden. flatMap() akzeptiert auch eine Funktion, die auf jedes Element in einer Sammlung oder einem Datenstrom angewendet wird. Im Gegensatz zu map() gibt die an flatMap() übergebene Funktion jedoch einen Stream oder eine Auflistung von Elementen zurück. flatMap() kombiniert dann Elemente aus allen Threads oder Sammlungen zu einem gemeinsamen Thread oder einer Sammlung.

Kurz gesagt, der Unterschied zwischen map() und flatMap() besteht darin, dass map() die Datenstruktur behält und eine neue Sammlung oder einen neuen Datenstrom mit geänderten Elementen zurückgibt, während flatMap() einen flachen Konverter ausführt, der Elemente aus verschiedenen Quellen zu einem gemeinsamen Stream oder einer Sammlung kombiniert.

Definition von map und flatMap in Java

Die map-Methode nimmt eine Konvertierungsfunktion an und wendet sie auf jedes Element der Eingabeauflistung an, wodurch eine neue Auflistung mit den Konvertierungsergebnissen erstellt wird. Beispielsweise können Sie mit der map-Methode jede Zahl in einer Liste verdoppeln oder eine Zeichenfolge in Großbuchstaben konvertieren.

Die Syntax der map-Methode lautet wie folgt:

Stream.map(Function mapper)

Die flatMap-Methode akzeptiert im Gegensatz zur map-Methode eine Transformationsfunktion, die einen Stream zurückgeben muss. flatMap «entpackt" dann jeden zurückgegebenen Stream und kombiniert sie zu einem gemeinsamen Stream. Dadurch erhalten Sie eine Liste von Objekten und keine Liste von Streams.

Die Syntax der flatMap-Methode lautet wie folgt:

Stream.flatMap(Function mapper)

Der Hauptunterschied zwischen map und flatMap besteht also in der Möglichkeit, flatMap zu verwenden, wenn die Konvertierungsfunktion einen Stream anstelle eines einfachen Werts zurückgeben muss. Dies macht flatMap zu einem sehr leistungsfähigen Werkzeug für die Arbeit mit Sammlungen und Streams in Java.

Wie funktioniert map in Java

Die an die map-Methode übergebene Funktion nimmt ein einzelnes Element an und gibt einen neuen Wert zurück, der im neuen Thread verwendet werden soll. Wenn Sie diese Funktion auf alle Elemente eines Streams anwenden, erstellt map einen neuen Stream mit den konvertierten Werten. Das Ergebnis ist ein Stream, der die konvertierten Elemente enthält.

Beispiel für die Verwendung der map-Methode:

List numbers = Arrays.asList(1, 2, 3, 4, 5);List squaredNumbers = numbers.stream().map(num -> num * num).collect(Collectors.toList());System.out.println(squaredNumbers);

Mit der map-Methode können Sie daher jedes Element eines Streams in einen neuen Wert konvertieren, was für verschiedene Datenverarbeitungsvorgänge nützlich sein kann.

Wie funktioniert flatMap in Java

Die flatMap-Methode besteht aus zwei Schritten:

  1. Anwenden einer Funktion auf Elemente: Zuerst wendet flatMap die angegebene Funktion auf jedes Element des ursprünglichen Streams an. Die Funktion muss einen Stream von Null oder mehr Elementen zurückgeben. Auf diese Weise wird jedes Element des ursprünglichen Streams in einen Wertefluss konvertiert.
  2. Kombinieren von Werteströmen: Als nächstes kombiniert flatMap alle Wertströme in einer einzigen Sequenz von Elementen. Es sammelt alle Werte aus jedem Thread und gibt einen gemeinsamen Wertestrom zurück.

Beispiel für die Verwendung von flatMap:

List words = Arrays.asList("Hallo", "Welt"); List letters = words.stream() .flatMap(word -> Arrays.stream(word.split(""))) .collect(Collectors.toList());

In diesem Beispiel wird eine flatMap auf den Fluss der Wörter "Hallo" und "Welt" angewendet. Die Funktion teilt dann jedes Wort mit der split() -Methode in einzelne Buchstaben auf. Als Ergebnis erhalten wir einen Strom aus den Buchstaben "P", "p", "und", "b", "e", "t", "M", "und", "p". Schließlich werden mit der collect() -Methode alle Buchstaben in die letters-Liste aufgenommen.

Beispiel für die Verwendung von map in Java

Map in Java ist eine Methode, die eine Funktion auf jedes Element in einem Stream anwendet und einen neuen Stream mit konvertierten Elementen zurückgibt.

Angenommen, wir haben eine Liste von Zahlen:

List numbers = Arrays.asList(1, 2, 3, 4, 5);

Wir möchten jedes Element der Liste um 1 erhöhen. Dazu können wir die map-Methode verwenden:

List incrementedNumbers = numbers.stream() .map(num -> num + 1) .collect(Collectors.toList());

Daher enthält die Variable incrementedNumbers eine Liste [2, 3, 4, 5, 6] wobei jedes Element der ursprünglichen Liste um 1 vergrößert wird.

Beispiel für die Verwendung von flatMap in Java

Betrachten Sie ein Beispiel, um besser zu verstehen, wie die Methode funktioniert flatMap. Nehmen wir an, wir haben eine Liste von Listen von Zahlen:

List> numbers = Arrays.asList(Arrays.asList(1, 2, 3),Arrays.asList(4, 5, 6),Arrays.asList(7, 8, 9));

Wir möchten einen einzigen Thread erhalten, der alle Zahlen aus diesen Listen enthält. Sie können die flatMap-Methode wie folgt verwenden:

List flattenedNumbers = numbers.stream().flatMap(Collection::stream).collect(Collectors.toList());

Wenn dieser Code funktioniert, enthält die Variable flattenedNumbers eine Liste [123456789]. Wir haben eine Liste von Listen in eine flache Liste von Zahlen konvertiert.

Gebrauch flatMap besonders nützlich bei der Arbeit mit verschachtelten Sammlungen oder bei Bedarf beim Konvertieren von Streamelementen in andere Objekte. Methode flatMap ermöglicht das Filtern, Konvertieren und Sammeln von Daten mit der vollen Leistungsfähigkeit der funktionalen Programmierung in Java.

Unterschied zwischen map und flatMap in Java

Map- und flatMap-Operatoren in Java werden verwendet, um Elemente einer Sammlung oder eines Datenflusses zu transformieren, weisen jedoch einige Unterschiede in ihrer Funktionalität auf.

Operator map nimmt ein Sammlungselement an und wendet eine Funktion auf dieses Element an, indem es das konvertierte Element zurückgibt. Das Ergebnis des map-Operators ist ein neuer Datenfluss, wobei jedes Element das Ergebnis ist, dass eine Funktion auf das entsprechende Element des Quelldatenflusses angewendet wird.

Operator flatMap, im gegensatz zu map, nimmt ein Sammlungselement an und gibt einen neuen Datenfluss zurück. Die an eine flatMap übergebene Funktion wird auch auf ein Auflistungselement angewendet, es kann jedoch nicht ein einzelnes Element, sondern ein neuer Datenfluss mit mehreren Elementen erhalten werden.

Verwendung flatMap vermeidet das Abrufen geschachtelter Datenströme (z. B. Threads innerhalb von Threads) in Fällen, in denen map kann zu einem ähnlichen Ergebnis führen.

Daher ist der Hauptunterschied zwischen map und flatMap ist der Rückgabetyp: map gibt ein einzelnes Element zurück, und flatMap - neuer Datenstrom.

Wann sollte ich map und flatMap verwenden

Map-Methode:

Methode map wird auf jedes Element der Sequenz angewendet und konvertiert es entsprechend der angegebenen Funktion. Das Ergebnis der Methode map es wird eine neue Sequenz geben, die die konvertierten Elemente enthält. Diese Methode ist nützlich, wenn Sie jedes Element von einem Typ in einen anderen konvertieren oder den Wert eines Felds in einem Objekt ändern möchten.

flatMap-Methode:

Methode flatMap ähnlich der Methode map, aber im Gegensatz dazu kann er mit Sequenzen arbeiten, die von einer Konvertierungsfunktion zurückgegeben werden. Anwendend flatMap zu jedem Element der ursprünglichen Sequenz erhalten wir keine konvertierten Elemente, sondern eine neue separate Sequenz von Elementen. Danach werden alle diese Sequenzen zu einer gemeinsamen Sequenz kombiniert.

Methode flatMap dies ist nützlich, wenn Konvertierungs-Funktionen mehrere Elemente oder Sequenzen zurückgeben und Sie die Ergebnisse ihrer Arbeit in einer gemeinsamen Sequenz kombinieren müssen.

Am Ende ist die Verwendung der Methode map es ist gerechtfertigt, wenn jedes Element einzeln konvertiert werden muss. Und die Methode flatMap dies ist nützlich, wenn Sie Elemente aus verschiedenen Sequenzen konvertieren und zusammenführen möchten.