Map.containsKey în Kotlin

Verifică dacă map-ul are o anumită cheie (containsKey, operatorul in) sau o anumită valoare (containsValue).

Sintaxă
fun containsKey(cheie: K): Boolean          // cheie in map
fun containsValue(valoare: V): Boolean

Ce face Map.containsKey

containsKey(k) întoarce true dacă cheia există. Forma scurtă este k in map (și k !in map). Căutarea după cheie este foarte rapidă.

containsValue(v) caută o valoare. Pentru că valorile nu sunt indexate, se parcurg toate intrările, deci pe map-uri mari este mai lent.

Atenție: dacă valoarea unei chei poate fi null, map[k] == null nu face diferența între „cheie lipsă” și „cheie cu valoarea null”; containsKey face.

Parametri

Parametru Descriere
cheie / valoare Ce se caută.

Ce returnează

true sau false.

Exemple

Exemplul 1: Este utilizatorul înregistrat?

in este forma scurtă pentru containsKey.

fun main() {
    val utilizatori = mapOf("ana.pop" to "Ana Pop", "ion99" to "Ion Ionescu")
    for (cont in listOf("ion99", "maria")) {
        if (cont in utilizatori) println("$cont: bun venit, ${utilizatori[cont]}!")
        else println("$cont: cont inexistent")
    }
    println(utilizatori.containsKey("ana.pop"))
}

Rezultat

ion99: bun venit, Ion Ionescu!
maria: cont inexistent
true

Exemplul 2: Căutare după valoare

Verificăm dacă vreun elev are nota 10 și dacă vreunul are 4.

fun main() {
    val note = mapOf("Ana" to 10, "Ion" to 8, "Maria" to 9)
    println("Cineva are 10: ${note.containsValue(10)}")
    println("Cineva are 4: ${note.containsValue(4)}")
}

Rezultat

Cineva are 10: true
Cineva are 4: false

Exemplul 3: Valoare null sau cheie lipsă

Pentru Ion și pentru Radu, [] dă null. Doar containsKey arată că Ion există (fără telefon), iar Radu nu.

fun main() {
    val telefoane = mapOf("Ana" to "0722 111 222", "Ion" to null)
    for (nume in listOf("Ion", "Radu")) {
        println("$nume: valoare=${telefoane[nume]}, există=${telefoane.containsKey(nume)}")
    }
}

Rezultat

Ion: valoare=null, există=true
Radu: valoare=null, există=false

Greșeli frecvente

  • Folosești containsValue într-o buclă pe un map mare: fiecare apel parcurge tot map-ul. Construiește un map invers sau un set de valori.
  • Verifici if (k in map) și apoi map[k]!!: mai simplu, map[k]?.let { ... } sau getOrElse.

Comenzi înrudite

  • Map.getValue: Citește valoarea unei chei: getValue aruncă excepție dacă lipsește, getOrDefault și getOrElse dau o valoare de rezervă.
  • Iterable.contains: contains (operatorul in) verifică dacă un element există; indexOf dă poziția primei apariții sau -1.
  • Map.keys: Proprietățile keys, values și entries dau cheile, valorile și perechile cheie–valoare ale unui map.
  • mapOf: Creează un map (dicționar cheie → valoare) din perechi scrise cu „to”; mutableMapOf dă unul pe care îl poți modifica.