Ce face MutableList.sort
sort() schimbă ordinea elementelor în lista existentă, crescător. sortDescending() sortează descrescător, iar sortBy { ... } și sortByDescending { ... } după o cheie calculată (un câmp, o lungime). sortWith primește un Comparator.
Aceste funcții întorc Unit (nimic): rezultatul este lista însăși. Merg doar pe MutableList (și pe tablouri). Variantele cu -ed (sorted, sortedBy) întorc o listă nouă și lasă originalul neschimbat.
Parametri
| Parametru | Descriere |
|---|---|
selector |
La sortBy: funcția care dă cheia de sortare. |
comparator |
La sortWith: regula de comparare. |
Ce returnează
Nimic (Unit); lista este sortată pe loc.
Exemple
Exemplul 1: sort și sortDescending
Aceeași listă este sortată întâi crescător, apoi descrescător. Nu creăm liste noi.
fun main() {
val preturi = mutableListOf(45, 12, 99, 30)
preturi.sort()
println(preturi)
preturi.sortDescending()
println(preturi)
}
Rezultat
[12, 30, 45, 99]
[99, 45, 30, 12]
Exemplul 2: sortBy pe obiecte
Sortăm elevii după medie, descrescător, și afișăm clasamentul.
data class Elev(val nume: String, var medie: Double)
fun main() {
val elevi = mutableListOf(Elev("Ana", 8.9), Elev("Ion", 9.6), Elev("Maria", 9.1))
elevi.sortByDescending { it.medie }
elevi.forEachIndexed { i, e -> println("${i + 1}. ${e.nume} ${e.medie}") }
elevi.sortBy { it.nume }
println(elevi.map { it.nume })
}
Rezultat
1. Ion 9.6
2. Maria 9.1
3. Ana 8.9
[Ana, Ion, Maria]
Exemplul 3: sort față de sorted
sorted() nu atinge lista a. sort() schimbă lista b. println(b.sort()) ar afișa kotlin.Unit.
fun main() {
val a = mutableListOf(3, 1, 2)
val noua = a.sorted()
println("a = $a, noua = $noua")
val b = mutableListOf(3, 1, 2)
b.sort()
println("b = $b")
}
Rezultat
a = [3, 1, 2], noua = [1, 2, 3]
b = [1, 2, 3]
Greșeli frecvente
- Scrii
val sortata = lista.sort():sortataesteUnit. Foloseștesorted()dacă vrei o listă nouă. - Apelezi
sort()pe oList(doar citire): nu compilează. Foloseștesorted()sau transformă cutoMutableList().
Comenzi înrudite
Iterable.sorted: Întoarce o listă nouă cu elementele în ordine crescătoare (sorted) sau descrescătoare (sortedDescending).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.Array.sort: Sortează crescător elementele tabloului chiar în tablou (îl modifică, nu creează altul).MutableList.shuffle: Amestecă pe loc elementele unei liste modificabile, într-o ordine aleatorie.