web-dev-qa-db-fra.com

Tri des données d'une liste modifiable dans Kotlin

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?

5
VTR2015

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é.

9
weston

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.

3
msrd0

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
0
Luca Murra