Ce face Map.toSortedMap
toSortedMap() copiază intrările într-un SortedMap (pe JVM, un java.util.TreeMap), în care cheile sunt mereu în ordine crescătoare. Și cheile adăugate ulterior își găsesc singure locul.
Cu un comparator poți alege altă ordine, de exemplu reverseOrder() pentru descrescător. Ordinea este după chei; pentru a ordona după valori, transformă în listă și folosește sortedBy { it.value }.
Parametri
| Parametru | Descriere |
|---|---|
comparator |
Opțional: regula de ordonare a cheilor. |
Ce returnează
Un SortedMap<K, V> nou, modificabil.
Exemple
Exemplul 1: Orașe în ordine alfabetică
Map-ul original are ordinea de inserare. Copia sortată are cheile în ordine; „Arad”, adăugat după, intră primul.
fun main() {
val distante = mapOf("Iași" to 400, "Cluj" to 450, "Brașov" to 170)
val sortat = distante.toSortedMap()
println(distante)
println(sortat)
sortat["Arad"] = 550
println(sortat)
println("Primul: ${sortat.firstKey()}")
}
Rezultat
{Iași=400, Cluj=450, Brașov=170}
{Brașov=170, Cluj=450, Iași=400}
{Arad=550, Brașov=170, Cluj=450, Iași=400}
Primul: Arad
Exemplul 2: Ordine descrescătoare și ordonare după valori
reverseOrder() inversează ordinea cheilor (anii). Pentru ordine după valoare folosim entries.sortedByDescending.
fun main() {
val absolventi = mapOf(2022 to 120, 2024 to 95, 2023 to 140)
println(absolventi.toSortedMap(reverseOrder()))
println(absolventi.entries.sortedByDescending { it.value }.map { it.key })
}
Rezultat
{2024=95, 2023=140, 2022=120}
[2023, 2022, 2024]
Greșeli frecvente
- Aștepți ca
toSortedMap()să ordoneze după valori: ordonează după chei. - Sortezi chei de tip text cu diacritice și „Ștei” apare după „Zalău”. Dă un comparator:
toSortedMap(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.Map.keys: Proprietățile keys, values și entries dau cheile, valorile și perechile cheie–valoare ale unui map.hashMapOf: Creează un map modificabil de un tip anume: HashMap (fără ordine), LinkedHashMap (ordinea inserării) sau SortedMap (chei sortate).Iterable.groupBy: Împarte elementele în grupe după o cheie și întoarce un map: cheie → lista elementelor din acea grupă.