Je suis nouveau chez Kotlin et je dois poser quelques questions sur la commande d'un MutableList<MyObject>
. Si je comprends bien, je peux créer un myMutableList.sortBy {it.int}
et un myMutableList.sortByDescending {it.int}
à la fois pour Int
et String
. Mais le retour est toujours une Unit
et non une MutableList
.
Où vais-je mal et comment dois-je procéder?
Mutable signifie "changeable", il est donc logique que plutôt que sortBy
renvoie une nouvelle liste, l'ordre des éléments a changé "en place" dans la liste actuelle.
Essayez de regarder l'ordre des éléments dans myMutableList
après le sortBy
et vous verrez qu'ils sont maintenant dans l'ordre demandé.
Les fonctions kotlin sort
, sortBy
etc. trient toutes les éléments de la liste. De la documentation de sort
:
Trie le tableau sur place en fonction de l'ordre naturel de ses éléments.
Si vous ne souhaitez pas trier les éléments sur place, mais plutôt renvoyer une liste triée (votre base n'a pas besoin d'être une MutableList
), vous pouvez utiliser sorted
, sortedBy
etc:
Renvoie une liste de tous les éléments triés selon leur ordre de tri naturel.
Pour trier une liste modifiable, vous pouvez utiliser:
Collections.sort(myMutableList)
Collections.reverse(myMutableList) //To sort the list by descending order
Et dans kotlin, vous pouvez utiliser l'instruction contract kotlin stdlib. Elle devient:
myMutableList.sort()
myMutableList.reverse() //To sort the list by descending order
Et ensuite, vous pouvez appeler myMutableList
et son ordre est modifié, comme suit:
val myMutableList = mutableListOf(8,5,4,6)
System.out.println("myMutableList: ${myMutableList[0]}")
myMutableList.sort()
System.out.println("myMutableList: ${myMutableList[0]}")
Sortie:
myMutableList: 8
myMutableList: 4