Iterable.partition în Kotlin

Împarte colecția în două liste: elementele care îndeplinesc condiția și cele care nu o îndeplinesc.

Sintaxă
fun <T> Iterable<T>.partition(conditie: (T) -> Boolean): Pair<List<T>, List<T>>

Ce face Iterable.partition

partition { ... } trece o singură dată prin elemente și le pune în două liste. Rezultatul este o pereche (Pair): first are elementele pentru care condiția este true, second pe celelalte.

De obicei perechea se desface direct în două variabile: val (promovati, corigenti) = elevi.partition { ... }. Este echivalent cu un filter și un filterNot, dar cu o singură parcurgere.

Parametri

Parametru Descriere
conditie Funcția care decide în ce listă ajunge fiecare element.

Ce returnează

Un Pair<List<T>, List<T>>: (îndeplinesc condiția, nu o îndeplinesc).

Exemple

Exemplul 1: Promovați și corigenți

Desfacem perechea în două liste cu nume clare. Ordinea elementelor se păstrează în fiecare listă.

fun main() {
    val medii = mapOf("Ana" to 9.2, "Ion" to 4.5, "Maria" to 7.8, "Radu" to 3.9, "Elena" to 5.0)
    val (promovati, corigenti) = medii.toList().partition { it.second >= 5 }
    println("Promovați: ${promovati.map { it.first }}")
    println("Corigenți: ${corigenti.map { it.first }}")
}

Rezultat

Promovați: [Ana, Maria, Elena]
Corigenți: [Ion, Radu]

Exemplul 2: Numere pare și impare

Accesăm cele două liste cu first și second.

fun main() {
    val rezultat = (1..10).partition { it % 2 == 0 }
    println("Pare: ${rezultat.first}")
    println("Impare: ${rezultat.second}")
}

Rezultat

Pare: [2, 4, 6, 8, 10]
Impare: [1, 3, 5, 7, 9]

Greșeli frecvente

  • Inversezi ordinea la desfacere: prima listă este întotdeauna cea pentru care condiția este true.
  • Vrei mai mult de două grupe: partition dă doar două. Folosește groupBy.

Comenzi înrudite

  • Iterable.filter: Creează o listă nouă doar cu elementele care îndeplinesc condiția (filterNot: cu cele care nu o îndeplinesc).
  • Iterable.groupBy: Împarte elementele în grupe după o cheie și întoarce un map: cheie → lista elementelor din acea grupă.
  • Pair: O pereche de două valori, first și second; a to b este felul scurt de a crea un Pair, folosit în mapOf.
  • Iterable.chunked: Împarte colecția în bucăți consecutive de câte n elemente; ultima bucată poate fi mai mică.