Map.filterKeys în Kotlin

Creează un map nou doar cu intrările ale căror chei (filterKeys) sau valori (filterValues) îndeplinesc o condiție.

Sintaxă
fun <K, V> Map<out K, V>.filterKeys(conditie: (K) -> Boolean): Map<K, V>
fun <K, V> Map<out K, V>.filterValues(conditie: (V) -> Boolean): Map<K, V>
fun <K, V> Map<out K, V>.filter(conditie: (Map.Entry<K, V>) -> Boolean): Map<K, V>

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 filterKeys să șteargă din map-ul original: întoarce unul nou. Pentru ștergere pe loc, pe un MutableMap, folosește map.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.