Ce face Map.mapValues
mapValues { ... } păstrează cheile și calculează o valoare nouă pentru fiecare intrare. Lambda primește intrarea întreagă (it.key, it.value), nu doar valoarea, așa că scrii it.value.
mapKeys { ... } păstrează valorile și calculează chei noi. Dacă două chei noi ies la fel, rămâne doar ultima intrare: verifică dacă transformarea păstrează cheile unice.
Parametri
| Parametru | Descriere |
|---|---|
transformare |
Funcția care primește o intrare Map.Entry și întoarce valoarea nouă (sau cheia nouă). |
Ce returnează
Un Map nou.
Exemple
Exemplul 1: Prețuri cu TVA
Cheile (produsele) rămân, valorile se înmulțesc cu 1.19. Folosim it.value, pentru că it este intrarea.
fun main() {
val faraTva = mapOf("carte" to 50, "pix" to 4, "caiet" to 10)
val cuTva = faraTva.mapValues { it.value * 119 / 100.0 }
println(cuTva)
}
Rezultat
{carte=59.5, pix=4.76, caiet=11.9}
Exemplul 2: Chei transformate
Scriem codurile județelor cu litere mici. La a doua transformare, două chei devin aceeași literă, deci rămâne doar ultima intrare.
fun main() {
val judete = mapOf("IS" to "Iași", "CJ" to "Cluj", "CT" to "Constanța")
println(judete.mapKeys { it.key.lowercase() })
println(judete.mapKeys { it.key.first() })
}
Rezultat
{is=Iași, cj=Cluj, ct=Constanța}
{I=Iași, C=Constanța}
Exemplul 3: Media fiecărui elev
Valoarea fiecărei intrări este o listă de note; o înlocuim cu media ei.
fun main() {
val catalog = mapOf("Ana" to listOf(9, 10, 8), "Ion" to listOf(7, 6, 8, 9))
val medii = catalog.mapValues { (_, note) -> note.average() }
println(medii)
}
Rezultat
{Ana=9.0, Ion=7.5}
Greșeli frecvente
- Scrii
mapValues { it * 2 }:iteste intrarea, nu valoarea, deci nu compilează. Scrieit.value * 2sau desface cu(_, v) -> v * 2. - Folosești
map { ... }pe un map și primești o listă, nu un map. Pentru a păstra structura de map foloseștemapValues/mapKeys.
Comenzi înrudite
Iterable.map: Creează o listă nouă în care fiecare element este rezultatul funcției aplicate elementului original.Map.filterKeys: Creează un map nou doar cu intrările ale căror chei (filterKeys) sau valori (filterValues) îndeplinesc o condiție.Iterable.groupBy: Împarte elementele în grupe după o cheie și întoarce un map: cheie → lista elementelor din acea grupă.Map.forEach: Parcurge toate intrările unui map și execută o acțiune pentru fiecare pereche cheie–valoare.