0Pricing
Kotlin Academy · Lektion

map und flatMap: Jedes Element umwandeln

Wandeln Sie Collections mit map um und glätten Sie verschachtelte Ergebnisse mit flatMap.

map und flatMap: Jedes Element umwandeln ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Kotlin Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Grundlagen der Transformation

map wendet eine Funktion auf jedes Element an und gibt eine neue Collection gleicher Größe zurück. flatMap macht dasselbe, reduziert jedoch Listen von Listen zu einer einzigen Liste.

Einfaches map

Transformieren Sie jedes Element mit einer Lambda-Funktion; das Ergebnis hat dieselbe Größe wie die Eingabe.

fun main() {
    val nums = listOf(1, 2, 3, 4)
    val squares = nums.map { it * it }
    println(squares) // [1, 4, 9, 16]
}

map ändert den Typ

Der Elementtyp der Ausgabe kann sich vom Eingabetyp unterscheiden – aus List<Int> kann List<String> werden.

fun main() {
    val nums = listOf(1, 2, 3)
    val labels = nums.map { "Item $it" }
    println(labels)
}

map für eine Data Class

Projizieren Sie eine Eigenschaft aus jedem Element – wandeln Sie Data Classes in einfachere Typen um.

data class User(val name: String, val age: Int)
fun main() {
    val users = listOf(User("Ada", 35), User("Ben", 22))
    val names = users.map { it.name }
    println(names) // [Ada, Ben]
}

Verkettung von map-Aufrufen

Mehrere map-Aufrufe lassen sich nahtlos kombinieren – jeder transformiert die Ausgabe des vorherigen Aufrufs.

fun main() {
    val nums = listOf(1, 2, 3)
    val result = nums.map { it + 1 }.map { it * 10 }
    println(result) // [20, 30, 40]
}

Einfaches flatMap

flatMap ruft für jedes Element eine Funktion auf, die eine Liste zurückgibt, und reduziert anschließend alle Ergebnisse zu einer einzigen Liste.

fun main() {
    val words = listOf("hello", "world")
    val chars = words.flatMap { it.toList() }
    println(chars) // [h, e, l, l, o, w, o, r, l, d]
}

Wann Sie flatMap verwenden sollten

Verwenden Sie flatMap, wenn die Lambda-Funktion natürlicherweise eine Liste erzeugt und Sie ein flaches Ergebnis statt einer Liste von Listen benötigen.

data class Order(val items: List<String>)
fun main() {
    val orders = listOf(
        Order(listOf("pen", "book")),
        Order(listOf("lamp")),
        Order(listOf("mug", "ring"))
    )
    val allItems = orders.flatMap { it.items }
    println(allItems) // [pen, book, lamp, mug, ring]
}

map einer Liste vs. flatMap

Vergleichen Sie die Ergebnistypen – map behält die Verschachtelung bei, flatMap entfernt sie.

fun main() {
    val nums = listOf(1, 2, 3)
    val mapped = nums.map { listOf(it, it * 10) }
    val flat = nums.flatMap { listOf(it, it * 10) }
    println(mapped) // [[1, 10], [2, 20], [3, 30]]
    println(flat)   // [1, 10, 2, 20, 3, 30]
}

flatMap mit bedingten Listen

Geben Sie für Elemente, die Sie entfernen möchten, leere Listen zurück – flatMap filtert und transformiert in einem Schritt.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5)
    val doubled = nums.flatMap { if (it % 2 == 0) listOf(it, it * 2) else emptyList() }
    println(doubled) // [2, 4, 4, 8]
}

map mit Index

mapIndexed stellt der Lambda-Funktion sowohl den Index als auch den Wert bereit.

fun main() {
    val fruits = listOf("apple", "banana", "cherry")
    val labeled = fruits.mapIndexed { i, name -> "$i: $name" }
    println(labeled)
}

Sequence vs. List

Wandeln Sie bei sehr langen Ketten zuerst in eine Sequence um, um das Erstellen von Zwischenlisten zu vermeiden.

fun main() {
    val big = (1..100).asSequence()
        .map { it + 1 }
        .filter { it % 5 == 0 }
        .map { it * 2 }
        .toList()
    println(big.take(5)) // first 5 results
}

Kurze Überprüfung

Was ist der entscheidende Unterschied zwischen map und flatMap?

Zusammenfassung

map transformiert jedes Element (gleiche Größe, möglicherweise neuer Typ). flatMap wendet eine Funktion an, die eine Liste zurückgibt, und fügt anschließend alle Ergebnisse zusammen. Kombinieren Sie die Funktion mit mapIndexed, wenn Sie Indizes benötigen, und wechseln Sie bei langen verzögert ausgewerteten Pipelines zu Sequence.

Häufig gestellte Fragen

Ist die Lektion „map und flatMap: Jedes Element umwandeln“ kostenlos?

Ja — der vollständige Text von „map und flatMap: Jedes Element umwandeln“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Kotlin Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Kotlin Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „map und flatMap: Jedes Element umwandeln“?

Wandeln Sie Collections mit map um und glätten Sie verschachtelte Ergebnisse mit flatMap. Du übst Kotlin Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Kotlin Academy zu starten?

Keine Vorkenntnisse erforderlich. Kotlin Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „map und flatMap: Jedes Element umwandeln“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Kotlin Academy-Lektion Code schreiben und ausführen?

Ja. Jede Kotlin Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. map und flatMap: Jedes Element umwandeln
  2. filter, filterNot und partition
  3. fold, reduce und runningFold
  4. Pipelines verketten und Zwischenlisten mit Sequence vermeiden
← Zurück zu Kotlin Academy