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:
partitiondă doar două. FoloseștegroupBy.
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ă.