Ce face Map.filterKeys
filterKeys { ... } primește în lambda doar cheia și păstrează intrările pentru care condiția este adevărată. filterValues { ... } primește doar valoarea. Rezultatul este un map nou; cel original nu se schimbă.
Când condiția are nevoie și de cheie, și de valoare, folosește filter { (cheie, valoare) -> ... }, care primește intrarea întreagă.
Parametri
| Parametru | Descriere |
|---|---|
conditie |
Funcția care decide ce intrări rămân. |
Ce returnează
Un Map<K, V> nou, cu ordinea intrărilor păstrată.
Exemple
Exemplul 1: Filtrare după valoare și după cheie
filterValues păstrează orașele cu temperatură peste 20. filterKeys păstrează orașele al căror nume începe cu C.
fun main() {
val grade = mapOf("Iași" to 18, "Constanța" to 24, "Cluj" to 16, "Craiova" to 22)
println(grade.filterValues { it > 20 })
println(grade.filterKeys { it.startsWith("C") })
}
Rezultat
{Constanța=24, Craiova=22}
{Constanța=24, Cluj=16, Craiova=22}
Exemplul 2: Condiție pe cheie și valoare
Desfacem intrarea în (produs, stoc) și păstrăm produsele lactate care s-au terminat.
fun main() {
val stoc = mapOf("lapte" to 0, "iaurt" to 5, "pâine" to 0, "lapte bătut" to 0)
val deComandat = stoc.filter { (produs, bucati) -> bucati == 0 && produs.startsWith("lapte") }
println(deComandat.keys)
}
Rezultat
[lapte, lapte bătut]
Greșeli frecvente
- Folosești
filterValuesși apoi cauți cheia valorii găsite: rezultatul este deja un map cu chei și valori. - Te aștepți ca
filterKeyssă șteargă din map-ul original: întoarce unul nou. Pentru ștergere pe loc, pe unMutableMap, foloseștemap.keys.removeAll { ... }.
Comenzi înrudite
Iterable.filter: Creează o listă nouă doar cu elementele care îndeplinesc condiția (filterNot: cu cele care nu o îndeplinesc).Map.mapValues: Creează un map nou cu aceleași chei și valori transformate (mapValues) sau cu aceleași valori și chei transformate (mapKeys).Map.keys: Proprietățile keys, values și entries dau cheile, valorile și perechile cheie–valoare ale unui map.Map.maxByOrNull: Găsește intrarea (cheie și valoare) pentru care funcția dată are valoarea maximă; null dacă map-ul e gol.