Iterable.sorted în Kotlin

Întoarce o listă nouă cu elementele în ordine crescătoare (sorted) sau descrescătoare (sortedDescending).

Sintaxă
fun <T : Comparable<T>> Iterable<T>.sorted(): List<T>
fun <T : Comparable<T>> Iterable<T>.sortedDescending(): List<T>

Ce face Iterable.sorted

sorted() creează o listă nouă sortată crescător, folosind ordinea naturală a tipului: numerele de la mic la mare, textele în ordinea codurilor caracterelor. Colecția originală nu se schimbă. sortedDescending() sortează de la mare la mic.

Sortarea este stabilă: elementele egale își păstrează ordinea dintre ele. Pentru a sorta după un câmp al unui obiect folosește sortedBy; pentru o listă modificabilă pe care vrei să o sortezi pe loc, sort().

Atenție la texte: literele mari vin înaintea celor mici, iar literele cu diacritice (ă, ș, ț) vin după z. Pentru ordinea din dicționarul românesc folosește sortedWith cu un Collator.

Ce returnează

O List<T> nouă, sortată.

Exemple

Exemplul 1: Note crescător și descrescător

Lista originală rămâne neschimbată; fiecare apel întoarce o listă nouă.

fun main() {
    val note = listOf(8, 10, 6, 9, 7)
    println("Crescător: ${note.sorted()}")
    println("Descrescător: ${note.sortedDescending()}")
    println("Originală: $note")
}

Rezultat

Crescător: [6, 7, 8, 9, 10]
Descrescător: [10, 9, 8, 7, 6]
Originală: [8, 10, 6, 9, 7]

Exemplul 2: Primele trei scoruri

Sortăm descrescător și luăm primele trei elemente cu take.

fun main() {
    val scoruri = listOf(1200, 870, 1540, 990, 1310, 760)
    val podium = scoruri.sortedDescending().take(3)
    println("Podium: $podium")
}

Rezultat

Podium: [1540, 1310, 1200]

Exemplul 3: Texte: majuscule și diacritice

„ana” (cu literă mică) ajunge după toate numele cu majusculă, iar „Ștefan” după „Zoe”, pentru că Ș are un cod mai mare decât Z.

fun main() {
    val nume = listOf("Ion", "ana", "Ștefan", "Zoe", "Bogdan")
    println(nume.sorted())
}

Rezultat

[Bogdan, Ion, Zoe, ana, Ștefan]

Greșeli frecvente

  • Apelezi lista.sorted() și aștepți ca lista să se schimbe: sorted întoarce o listă nouă. Păstrează rezultatul (val sortata = lista.sorted()) sau folosește sort() pe o MutableList.
  • Sortezi nume românești cu sorted() și „Ștefan” apare după „Zoe”. Folosește sortedWith(Collator.getInstance(Locale.forLanguageTag("ro"))).

Comenzi înrudite

  • Iterable.sortedBy: Sortează elementele după valoarea calculată de o funcție, de exemplu elevii după medie sau orașele după populație.
  • Iterable.sortedWith: Sortează după un Comparator: mai multe criterii cu compareBy/thenBy sau ordine românească cu Collator.
  • Iterable.reversed: Întoarce o listă nouă cu elementele în ordine inversă: ultimul devine primul.
  • MutableList.sort: Sortează chiar lista modificabilă (pe loc), crescător, descrescător sau după un câmp; nu întoarce nimic.
  • Iterable.max: Găsește cel mai mare (max) sau cel mai mic (min) element; variantele OrNull întorc null pentru o colecție goală.