maxOf în Kotlin

Comparare și timp Kotlin 1.1

Returnează cea mai mare (maxOf) sau cea mai mică (minOf) dintre două sau mai multe valori comparabile.

Sintaxă
fun maxOf(a: Int, b: Int): Int
fun maxOf(a: Int, vararg other: Int): Int
fun <T : Comparable<T>> maxOf(a: T, b: T): T
fun minOf(a: Int, b: Int): Int

Ce face maxOf

maxOf(a, b) returnează valoarea mai mare, iar minOf(a, b) pe cea mai mică. Merg cu numere de orice tip, dar și cu orice valoare Comparable: texte (ordine alfabetică după codul caracterelor), date, obiecte proprii. Poți da și mai multe valori: maxOf(3, 9, 4).

Există și varianta cu un Comparator ca ultim argument: maxOf(a, b, compareBy { it.length }). Pentru o listă întreagă folosește lista.max(); extensia lista.maxOf { ... } calculează maximul unei valori pentru fiecare element.

Parametri

Parametru Descriere
a, b, other Valorile comparate; trebuie să aibă același tip.

Ce returnează

Valoarea maximă, respectiv minimă. La egalitate se returnează prima.

Exemple

Exemplul 1: Numere și texte

fun main() {
    println(maxOf(7, 12))
    println(minOf(7, 12))
    println(maxOf(3, 9, 4, 8))
    println(minOf(2.5, -1.0, 0.75))
    println(maxOf("Ana", "Bogdan"))
    println(minOf("mere", "banane", "pere"))
}

Rezultat

12
7
9
-1.0
Bogdan
banane

Exemplul 2: Limitarea unei reduceri

Reducerea este 15% din total, dar cel puțin 10 lei și cel mult 50 de lei.

fun reducere(total: Double): Double = minOf(maxOf(total * 0.15, 10.0), 50.0)

fun main() {
    for (total in listOf(40.0, 200.0, 900.0)) {
        println("Total $total lei -> reducere ${reducere(total)} lei")
    }
}

Rezultat

Total 40.0 lei -> reducere 10.0 lei
Total 200.0 lei -> reducere 30.0 lei
Total 900.0 lei -> reducere 50.0 lei

Greșeli frecvente

  • Amesteci tipuri: maxOf(5, 2.5) nu compilează, pentru că Int și Double sunt tipuri diferite. Scrie maxOf(5.0, 2.5).
  • Folosești maxOf(lista) pentru o listă. Funcția de nivel superior primește valori separate; pentru listă scrie lista.max().

Comenzi înrudite

  • Int.coerceIn: Ține un număr între limite: coerceIn(0, 100) îl aduce în interval, coerceAtLeast/AtMost pun doar o limită.
  • compareBy: Creează un Comparator care compară obiectele după una sau mai multe proprietăți, în ordine; se folosește cu sortedWith.
  • Iterable.max: Găsește cel mai mare (max) sau cel mai mic (min) element; variantele OrNull întorc null pentru o colecție goală.