Ce face Map.maxByOrNull
maxByOrNull { it.value } parcurge intrările map-ului și întoarce intrarea întreagă cu valoarea cea mai mare, deci ai și cheia (key), și valoarea (value). minByOrNull găsește minimul.
Pe un map gol întoarce null, de aceea rezultatul se folosește cu ?. sau ?:. Există și maxBy, fără OrNull, care aruncă excepție pe un map gol. La egalitate se întoarce prima intrare.
Parametri
| Parametru | Descriere |
|---|---|
selector |
Funcția care primește o intrare și dă valoarea după care se compară. |
Ce returnează
Un Map.Entry<K, V>?.
Exemple
Exemplul 1: Luna cu cele mai mari vânzări
Rezultatul este o intrare: afișăm atât luna (cheia), cât și suma (valoarea).
fun main() {
val vanzari = mapOf("ianuarie" to 12_400, "februarie" to 9_800, "martie" to 15_100, "aprilie" to 11_000)
val maxim = vanzari.maxByOrNull { it.value }
val minim = vanzari.minByOrNull { it.value }
println("Cea mai bună lună: ${maxim?.key} (${maxim?.value} lei)")
println("Cea mai slabă lună: ${minim?.key} (${minim?.value} lei)")
}
Rezultat
Cea mai bună lună: martie (15100 lei)
Cea mai slabă lună: februarie (9800 lei)
Exemplul 2: Cuvântul cel mai frecvent
Numărăm cuvintele cu groupingBy, apoi alegem intrarea cu numărul cel mai mare. Pe un map gol tratăm null.
fun main() {
val text = "mere pere mere prune mere pere"
val frecvente = text.split(" ").groupingBy { it }.eachCount()
val top = frecvente.maxByOrNull { it.value }
println(top?.let { "${it.key} apare de ${it.value} ori" })
val gol = emptyMap<String, Int>()
println(gol.maxByOrNull { it.value }?.key ?: "Nu sunt cuvinte")
}
Rezultat
mere apare de 3 ori
Nu sunt cuvinte
Greșeli frecvente
- Scrii
maxByOrNull { it }:iteste intrarea, care nu se poate compara. Alegeit.valuesauit.key. - Vrei doar valoarea maximă:
values.maxOrNull()este mai simplu.
Comenzi înrudite
Iterable.maxBy: Întoarce elementul pentru care funcția dată are valoarea cea mai mare (maxBy) sau cea mai mică (minBy).Iterable.max: Găsește cel mai mare (max) sau cel mai mic (min) element; variantele OrNull întorc null pentru o colecție goală.Iterable.groupingBy: Pregătește o grupare după cheie; eachCount() numără apoi câte elemente are fiecare cheie (frecvența).Map.keys: Proprietățile keys, values și entries dau cheile, valorile și perechile cheie–valoare ale unui map.