Kotlin flatMap()-Funktion

David Mbochi Njonge 20 Juni 2023
  1. Häufige Fallstricke bei der Verwendung der map()-Funktion in Kotlin
  2. Kotlin-Funktion flatMap()
  3. eine Alternative der Funktion flatMap() in Kotlin
  4. Abschluss
Kotlin flatMap()-Funktion

Bei der Entwicklung von Anwendungen verwenden wir immer das Collections-Framework in allen Anwendungen. Wenn Sie eine Liste haben, haben Sie mit Sammlungen interagiert.

Wir verwenden Sammlungen, um verwandte Daten vorübergehend im Speicher zu speichern, um verschiedene Berechnungen mit den Daten durchzuführen. Sammlungen helfen uns beispielsweise dabei, die Datengröße aus der Datenbank oder einer Datei zu ermitteln.

Diese Berechnungen waren ziemlich schwierig zu implementieren, bevor Streams in Java 8 eingeführt wurden, da die Entwickler einen imperativen Programmieransatz verwendeten.

Die stream-API machte die Berechnungen mit Sammlungen recht einfach zu implementieren, da der Code einen deklarativen Programmieransatz verwendet.

In Kotlin können wir diesen Programmieransatz auch mit denselben Methoden verwenden, die in der stream-API verwendet werden, wie etwa filter(), map(), flatMap() und andere.

In diesem Tutorial lernen wir, wie die Funktion flatMap() in Kotlin funktioniert und den Unterschied zwischen den Funktionen flatMap() und map().

Häufige Fallstricke bei der Verwendung der map()-Funktion in Kotlin

Wenn Sie die Funktion map() verwenden, entscheiden Sie sich möglicherweise dafür, eine einzelne Liste zu erhalten, nachdem Sie mit zwei Listen gearbeitet haben, aber die Funktion gibt keine einzelne Liste zurück.

Dies ist ein häufiges Problem bei der Verwendung der map()-Methode. Der nächste Abschnitt zeigt, wie das Problem auftritt.

Öffnen Sie die IntelliJ-Entwicklungsumgebung und wählen Sie Datei > Neu > Projekt. Geben Sie den Namen des Projekts als kotlin-flatmap ein, wählen Sie Kotlin im Abschnitt Sprache und Intellij im Abschnitt System erstellen.

Erstellen Sie eine Main.kt-Datei im Ordner kotlin und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<List<String>> {
    return stringArray.map { word -> word.split("") }
        .distinct()
        .toList();
}

fun main(){
    println(getUniqueCharacters());
}

Unser Ziel für alle Beispiele, die wir in diesem Tutorial behandeln werden, ist es, eine einzelne Liste mit unterschiedlichen Zeichen aus einem Array mit zwei Strings zurückzugeben, wie oben gezeigt.

Wie Sie bemerkt haben, gibt die Methode getUniqueCharacters() eine Liste von Listen List<List<String>> zurück, die der Rückgabetyp der Funktion map() ist.

Die Funktion map() gibt eine Liste zurück, die zwei unterschiedliche Listen enthält, was unserem Ziel zuwiderläuft. Führen Sie den Code aus, um zu überprüfen, ob die Funktion map() zwei unterschiedliche Listen zurückgibt, wie unten gezeigt.

[[, H, a, r, r, y, ], [, p, o, t, t, e, r, ]]

Kotlin-Funktion flatMap()

Kommentieren Sie das vorherige Beispiel aus und kopieren Sie den folgenden Code und fügen Sie ihn danach in die Datei Main.kt ein.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<String> {
    return stringArray.map { word -> word.split("") }
        .flatMap { it }
        .distinct()
        .toList();
}

fun main(){
    println(getUniqueCharacters())
}

Die Funktion getUniqueCharacters() gibt eine Liste zurück, die einen String enthält, der der Rückgabetyp der Funktion flatMap() ist.

Die flatMap() gibt eine einzelne Liste zurück, die eindeutige Elemente enthält, indem das Array mit der split()-Methode in einzelne Zeichen umgewandelt wird. Die Methode distinct() stellt sicher, dass die zurückgegebene Liste eindeutige Zeichen enthält.

Führen Sie den obigen Code aus, um eine einzelne Liste zu überprüfen, die eindeutige Zeichenergebnisse enthält.

[, H, a, r, y, p, o, t, e]

eine Alternative der Funktion flatMap() in Kotlin

Kommentieren Sie das vorherige Beispiel aus und kopieren Sie den folgenden Code und fügen Sie ihn danach in die Datei Main.kt ein.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<String> {
    return stringArray.map { word -> word.split("") }
        .flatten()
        .distinct()
        .toList()
}

fun main(){
    println(getUniqueCharacters())
}

In diesem Beispiel haben wir die Funktion flatten() verwendet, die der Funktion flatMap() ähnelt. Die Funktion flatten() gibt eine einzelne Liste zurück, indem alle vorhandenen Sammlungselemente in einer Liste hinzugefügt werden.

Führen Sie dieses Beispiel aus, um zu überprüfen, ob es eine einzelne Liste zurückgibt, die alle eindeutigen Zeichen aus unserem Array enthält.

[, H, a, r, y, p, o, t, e]

Abschluss

In diesem Tutorial haben wir gelernt, wie die Funktion flatMap() funktioniert, wenn Sie eine einzelne Liste aus mehreren Sammlungen zurückgeben möchten. Wir haben auch den Nachteil der Verwendung der map()-Methode kennengelernt, um dasselbe Ziel zu erreichen.

Wenn Sie mehr darüber lesen möchten, wie andere Funktionen in Kotlin funktionieren, besuchen Sie diese Kotlin-Dokumentation, die die Funktionen im Detail behandelt.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Verwandter Artikel - Kotlin Function