0Pricing
Kotlin Academy · Lektion

filter, filterNot und partition

Teilen und selektieren Sie Elemente mithilfe prädikatbasierter Funktionen.

filter, filterNot und partition ist eine kostenlose Kotlin Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Auswahloperationen

filter behält Elemente, die ein Prädikat erfüllen. filterNot behält Elemente, die es NICHT erfüllen. partition teilt die Collection gleichzeitig in zwei Listen auf.

Einfaches filter

filter { ... } gibt eine neue Liste zurück, die nur Elemente enthält, für die das Prädikat wahr ist.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5, 6)
    val evens = nums.filter { it % 2 == 0 }
    println(evens) // [2, 4, 6]
}

filterNot

filterNot { ... } ist das Gegenstück: Es behält Elemente, für die das Prädikat falsch ist. Das Ergebnis entspricht dem Umkehren des Prädikats, macht die Absicht aber klarer.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5, 6)
    val odds = nums.filterNot { it % 2 == 0 }
    println(odds) // [1, 3, 5]
}

partition

partition gibt ein Pair zurück: zuerst die passenden, danach die nicht passenden Elemente. So vermeiden Sie zwei Durchläufe über die Daten.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5, 6)
    val (evens, odds) = nums.partition { it % 2 == 0 }
    println("evens=$evens odds=$odds")
}

partition mit Data Class

Teilen Sie eine Liste von Datensätzen in einem Durchlauf in zwei Gruppen auf.

data class User(val name: String, val active: Boolean)
fun main() {
    val users = listOf(User("Ada", true), User("Ben", false), User("Cal", true))
    val (active, inactive) = users.partition { it.active }
    println("active=${active.map { it.name }}")
    println("inactive=${inactive.map { it.name }}")
}

filterIndexed

Das Prädikat erhält sowohl den Index als auch den Wert – nützlich, wenn die Position relevant ist.

fun main() {
    val nums = listOf(10, 20, 30, 40, 50)
    val every2nd = nums.filterIndexed { i, _ -> i % 2 == 0 }
    println(every2nd) // [10, 30, 50]
}

filterIsInstance

Behalten Sie nur Elemente eines bestimmten Typs – innerhalb der Funktion werden Smart Casts verwendet.

fun main() {
    val mixed: List<Any> = listOf(1, "hello", 2.0, "world", 3)
    val onlyStrings = mixed.filterIsInstance<String>()
    println(onlyStrings) // [hello, world]
}

filterNotNull

Entfernen Sie Null-Einträge aus einer Liste von Nullable-Werten – zurück bleibt eine Liste von Nicht-Null-Elementen.

fun main() {
    val mixed: List<String?> = listOf("a", null, "b", null, "c")
    val nonNull = mixed.filterNotNull()
    println(nonNull) // [a, b, c]
}

filter und map verketten

Kombinieren Sie filter und map zu Pipelines, die Auswahl und Transformation verbinden.

data class Product(val name: String, val price: Double, val inStock: Boolean)
fun main() {
    val products = listOf(
        Product("Pen", 1.0, true),
        Product("Book", 12.0, false),
        Product("Lamp", 25.0, true)
    )
    val availableNames = products.filter { it.inStock }.map { it.name }
    println(availableNames) // [Pen, Lamp]
}

Klarheit durch filterNot

Manchmal ist filterNot { it.isActive } besser lesbar als filter { !it.isActive }.

data class Task(val title: String, val done: Boolean)
fun main() {
    val tasks = listOf(Task("Email", true), Task("Lunch", false), Task("Code", true))
    val pending = tasks.filterNot { it.done }
    println(pending) // [Task(title=Lunch, done=false)]
}

partition gibt Listen zurück

Das Pair aus partition enthält zwei gewöhnliche Lists – Sie können sie destrukturieren oder über .first und .second darauf zugreifen.

fun main() {
    val nums = (1..10).toList()
    val result = nums.partition { it > 5 }
    println("above 5: ${result.first}")
    println("below 6: ${result.second}")
}

partition vs. zwei filter-Aufrufe

Wenn Sie beide Teilmengen benötigen, ist partition schneller – ein Durchlauf statt zwei.

fun main() {
    val nums = (1..10).toList()
    // Two passes:
    val a = nums.filter { it > 5 }
    val b = nums.filter { it <= 5 }
    // One pass:
    val (c, d) = nums.partition { it > 5 }
    println("$a $b")
    println("$c $d")
}

Kurze Überprüfung

Welche Funktion gibt in einem einzigen Durchlauf SOWOHL die passenden als auch die nicht passenden Elemente zurück?

Zusammenfassung

filter wählt passende Elemente aus; filterNot wählt nicht passende Elemente aus; partition gibt beide Gruppen in einem Durchlauf zurück. Verwenden Sie filterIsInstance, um Elemente eines bestimmten Typs zu behalten, und filterNotNull, um Null-Werte zu entfernen. Verketten Sie die Funktionen mit map, um Auswahl und Transformation zu verbinden.

Häufig gestellte Fragen

Ist die Lektion „filter, filterNot und partition“ kostenlos?

Ja — der vollständige Text von „filter, filterNot und partition“ 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 „filter, filterNot und partition“?

Teilen und selektieren Sie Elemente mithilfe prädikatbasierter Funktionen. 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 2 von 4.

Wie lange dauert die Lektion „filter, filterNot und partition“?

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