Iterable.associate în Kotlin

Construiește un map din colecție: pentru fiecare element lambda întoarce o pereche cheie to valoare.

Sintaxă
fun <T, K, V> Iterable<T>.associate(transformare: (T) -> Pair<K, V>): Map<K, V>

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ă, associate păstrează doar ultima valoare. Verifică dacă cheile sunt unice sau folosește groupBy.
  • Scrii associate { it.id to it }: este exact associateBy { 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.