Map.plus în Kotlin

Map-uri (dicționare) Kotlin 1.0 (minus: 1.1)

Operatorii + și - pe map-uri: creează un map nou cu intrări adăugate sau cu chei scoase, fără să schimbe originalul.

Sintaxă
operator fun <K, V> Map<out K, V>.plus(pereche: Pair<K, V>): Map<K, V>
operator fun <K, V> Map<out K, V>.plus(alt: Map<out K, V>): Map<K, V>
operator fun <K, V> Map<out K, V>.minus(cheie: K): Map<K, V>
operator fun <K, V> Map<out K, V>.minus(chei: Iterable<K>): Map<K, V>

Ce face Map.plus

map + (k to v) întoarce un map nou cu intrarea adăugată; dacă cheia exista, valoarea din dreapta o înlocuiește. map + altMap unește două map-uri; la chei comune câștigă cel din dreapta.

map - k întoarce un map nou fără cheia k; map - listOf(k1, k2) scoate mai multe chei. Originalul nu se schimbă, deci merg și pe map-uri doar pentru citire.

Parametri

Parametru Descriere
pereche / alt Ce se adaugă: o pereche, un map sau o listă de perechi.
cheie / chei Ce chei se scot.

Ce returnează

Un Map<K, V> nou.

Exemple

Exemplul 1: Setări implicite și setări ale utilizatorului

Unim setările implicite cu ale utilizatorului; la cheile comune câștigă utilizatorul (map-ul din dreapta).

fun main() {
    val implicite = mapOf("limba" to "ro", "tema" to "luminoasă", "font" to "14")
    val utilizator = mapOf("tema" to "întunecată")
    val finale = implicite + utilizator
    println(finale)
    println(finale + ("font" to "16"))
}

Rezultat

{limba=ro, tema=întunecată, font=14}
{limba=ro, tema=întunecată, font=16}

Exemplul 2: Scoaterea cheilor

Scoatem o cheie, apoi o listă de chei. Map-ul original rămâne cu toate intrările.

fun main() {
    val profil = mapOf("nume" to "Ana", "email" to "ana@exemplu.ro", "parola" to "secret", "telefon" to "0722")
    println(profil - "parola")
    println(profil - listOf("parola", "telefon"))
    println(profil.size)
}

Rezultat

{nume=Ana, email=ana@exemplu.ro, telefon=0722}
{nume=Ana, email=ana@exemplu.ro}
4

Greșeli frecvente

  • Scrii map + k to v fără paranteze: to are prioritate mai mică decât +, deci se calculează (map + k) to v, care nu compilează. Scrie map + (k to v).
  • Folosești + într-o buclă pentru multe intrări: fiecare pas copiază tot map-ul. Folosește un MutableMap cu put.

Comenzi înrudite

  • Iterable.plus: Operatorii + și – pe colecții: creează o listă nouă cu elemente adăugate sau scoase, fără să schimbe originalul.
  • MutableMap.put: Adaugă o cheie cu valoarea ei sau înlocuiește valoarea unei chei existente; putAll copiază toate intrările altui map.
  • MutableMap.remove: Șterge o cheie (și valoarea ei) din map și întoarce valoarea ștearsă sau null dacă cheia nu exista.
  • mapOf: Creează un map (dicționar cheie → valoare) din perechi scrise cu „to”; mutableMapOf dă unul pe care îl poți modifica.