Ce face Iterable.associate
associate { ... } trece prin elemente și, pentru fiecare, lambda întoarce o pereche cheie to valoare. Perechile devin intrările map-ului rezultat, în ordinea elementelor.
Dacă două elemente dau aceeași cheie, rămâne ultima valoare (cea de mai târziu o înlocuiește pe cea de mai devreme). Dacă vrei să păstrezi toate valorile, folosește groupBy.
Când cheia sau valoarea este chiar elementul, există variantele mai scurte associateBy și associateWith.
Parametri
| Parametru | Descriere |
|---|---|
transformare |
Funcția care întoarce perechea cheie to valoare pentru fiecare element. |
Ce returnează
Un Map<K, V> care păstrează ordinea de inserare.
Exemple
Exemplul 1: Din linii de text într-un map
Fiecare linie are forma „produs=preț”. O despărțim la = și construim perechea.
fun main() {
val linii = listOf("pâine=4.5", "lapte=7", "ouă=12.9")
val preturi = linii.associate {
val (produs, pret) = it.split("=")
produs to pret.toDouble()
}
println(preturi)
println("Laptele costă ${preturi["lapte"]} lei")
}
Rezultat
{pâine=4.5, lapte=7.0, ouă=12.9}
Laptele costă 7.0 lei
Exemplul 2: Cheie repetată: ultima câștigă
Ana apare de două ori; în map rămâne nota ei de la a doua apariție.
fun main() {
val note = listOf("Ana" to 7, "Ion" to 9, "Ana" to 10)
val ultimaNota = note.associate { (nume, nota) -> nume to nota }
println(ultimaNota)
}
Rezultat
{Ana=10, Ion=9}
Greșeli frecvente
- Pierzi date fără să observi: când cheile se repetă,
associatepăstrează doar ultima valoare. Verifică dacă cheile sunt unice sau foloseștegroupBy. - Scrii
associate { it.id to it }: este exactassociateBy { it.id }, mai scurt și mai clar.
Comenzi înrudite
Iterable.associateBy: associateBy face un map cu elementele ca valori și o cheie calculată; associateWith ține elementele ca chei.Iterable.toMap: Transformă o listă de perechi (cheie to valoare) într-un map; la chei repetate rămâne ultima valoare.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.map: Creează o listă nouă în care fiecare element este rezultatul funcției aplicate elementului original.