Ce face Iterable.max
max() și min() întorc cel mai mare, respectiv cel mai mic element. Merg pe orice tip care se poate compara: numere, texte (ordine alfabetică după codul caracterelor), date calendaristice.
Pe o colecție goală max() și min() aruncă NoSuchElementException. maxOrNull() și minOrNull() întorc în acest caz null, pe care îl tratezi cu ?:.
Pentru o listă de obiecte (cel mai scump produs, elevul cu media cea mai mare) folosește maxBy / minBy. Pentru a compara doar două valori există maxOf(a, b).
Ce returnează
Elementul cel mai mare sau cel mai mic; variantele OrNull întorc null dacă nu există elemente.
Exemple
Exemplul 1: Cea mai mare și cea mai mică temperatură
Pe o listă de numere, max și min dau extremele. Diferența lor este amplitudinea.
fun main() {
val temperaturi = listOf(12, 18, 23, 9, 15)
val maxim = temperaturi.max()
val minim = temperaturi.min()
println("Maxima: $maxim °C, minima: $minim °C")
println("Amplitudine: ${maxim - minim} grade")
}
Rezultat
Maxima: 23 °C, minima: 9 °C
Amplitudine: 14 grade
Exemplul 2: Colecție goală: varianta OrNull
maxOrNull întoarce null pe o listă goală, iar ?: dă un mesaj în locul lui. max() pe aceeași listă ar opri programul.
fun main() {
val noteIon = listOf(7, 9, 6)
val noteMaria = emptyList<Int>()
println("Ion: ${noteIon.maxOrNull() ?: "fără note"}")
println("Maria: ${noteMaria.maxOrNull() ?: "fără note"}")
println("Cea mai mică notă a lui Ion: ${noteIon.minOrNull()}")
}
Rezultat
Ion: 9
Maria: fără note
Cea mai mică notă a lui Ion: 6
Exemplul 3: Max pe texte
Textele se compară caracter cu caracter. „Zalău” este după „Arad”, deci este maximul; „Arad” este minimul.
fun main() {
val orase = listOf("Iași", "Arad", "Zalău", "Brașov")
println("Primul alfabetic: ${orase.min()}")
println("Ultimul alfabetic: ${orase.max()}")
}
Rezultat
Primul alfabetic: Arad
Ultimul alfabetic: Zalău
Greșeli frecvente
- Apelezi
max()pe o listă care poate fi goală: programul se oprește cuNoSuchElementException. FoloseștemaxOrNull(). - Cod vechi (Kotlin 1.4-1.6) în care
max()era depreciat: de la Kotlin 1.7max()există din nou și întoarce o valoare non-null. - Compari texte cu diacritice: „Ștei” iese după „Zalău”, pentru că litera Ș are cod mai mare decât Z. Pentru ordinea din dicționar folosește un
Collator(vezisortedWith).
Comenzi înrudite
Iterable.maxBy: Întoarce elementul pentru care funcția dată are valoarea cea mai mare (maxBy) sau cea mai mică (minBy).maxOf: Returnează cea mai mare (maxOf) sau cea mai mică (minOf) dintre două sau mai multe valori comparabile.Iterable.sorted: Întoarce o listă nouă cu elementele în ordine crescătoare (sorted) sau descrescătoare (sortedDescending).Iterable.sum: Adună toate numerele dintr-o listă, mulțime sau tablou și întoarce totalul.Iterable.average: Calculează media aritmetică a numerelor din colecție; întoarce mereu un Double.