Ce face Map.getValue
map[cheie] (adică get) întoarce V?: valoarea sau null dacă cheia lipsește. De aceea trebuie tratat cu ?. sau ?:.
getValue(cheie) întoarce direct V (fără null), dar dacă cheia nu există aruncă NoSuchElementException. Folosește-l când știi sigur că cheia este acolo.
getOrDefault(cheie, implicit) întoarce valoarea de rezervă dată când cheia lipsește. getOrElse(cheie) { ... } face la fel, dar valoarea de rezervă vine dintr-o lambda, care se execută doar dacă e nevoie (util când rezerva este scumpă de calculat sau vrei să afișezi un mesaj). Niciuna nu adaugă cheia în map; pentru asta există getOrPut.
Parametri
| Parametru | Descriere |
|---|---|
cheie |
Cheia căutată. |
implicit |
Valoarea (sau lambda care o produce) întoarsă când cheia lipsește. |
Ce returnează
Valoarea cheii, de tipul V (non-null).
Exemple
Exemplul 1: Patru feluri de a citi
Pentru „Brăila”, care lipsește, [] dă null, iar getOrDefault și getOrElse dau rezerva. getValue merge pentru o cheie existentă.
fun main() {
val populatie = mapOf("Iași" to 271_000, "Cluj" to 286_000)
println(populatie["Brăila"])
println(populatie.getValue("Iași"))
println(populatie.getOrDefault("Brăila", 0))
println(populatie.getOrElse("Brăila") { -1 })
}
Rezultat
null
271000
0
-1
Exemplul 2: getValue pe o cheie lipsă
Prindem excepția ca să vedem mesajul ei. În cod real, folosește getValue doar când cheia sigur există.
fun main() {
val preturi = mapOf("pâine" to 4.5, "lapte" to 7.0)
try {
println(preturi.getValue("cafea"))
} catch (e: NoSuchElementException) {
println("Eroare: ${e.message}")
}
}
Rezultat
Eroare: Key cafea is missing in the map.
Exemplul 3: getOrElse cu mesaj
Lambda rulează doar pentru cheile care lipsesc, așa că mesajul apare o singură dată.
fun main() {
val traduceri = mapOf("hello" to "salut", "cat" to "pisică")
for (cuv in listOf("hello", "dog", "cat")) {
val t = traduceri.getOrElse(cuv) {
println("(lipsește traducerea pentru $cuv)")
cuv
}
println("$cuv -> $t")
}
}
Rezultat
hello -> salut
(lipsește traducerea pentru dog)
dog -> dog
cat -> pisică
Greșeli frecvente
- Scrii
map[cheie]!!ca să scapi denull: la o cheie lipsă primeștiNullPointerExceptionfără niciun detaliu.getValuedă măcar un mesaj clar cu cheia lipsă. - Aștepți ca
getOrDefaultsaugetOrElsesă salveze rezerva în map: nu o salvează. FoloseștegetOrPutpe unMutableMap.
Comenzi înrudite
MutableMap.getOrPut: Întoarce valoarea cheii; dacă lipsește, o calculează cu lambda, o salvează în map și o întoarce.Map.containsKey: Verifică dacă map-ul are o anumită cheie (containsKey, operatorul in) sau o anumită valoare (containsValue).mapOf: Creează un map (dicționar cheie → valoare) din perechi scrise cu „to”; mutableMapOf dă unul pe care îl poți modifica.List.getOrNull: Citește elementul de la o poziție fără risc: getOrNull dă null, getOrElse o valoare implicită când poziția nu există.