Disons que j'ai une liste de personnes que je dois trier par âge en premier, puis par nom.
Venant d’un fond C #, je peux facilement y parvenir dans LINQ en utilisant ce langage:
var list=new List<Person>();
list.Add(new Person(25, "Tom"));
list.Add(new Person(25, "Dave"));
list.Add(new Person(20, "Kate"));
list.Add(new Person(20, "Alice"));
//will produce: Alice, Kate, Dave, Tom
var sortedList=list.OrderBy(person => person.Age).ThenBy(person => person.Name).ToList();
Comment peut-on accomplir cela en utilisant Kotlin?
C’est ce que j’ai essayé (c’est évidemment faux puisque la sortie de la première clause "sortis par" est remplacée par la seconde, ce qui donne une liste triée par nom uniquement)
val sortedList = ArrayList(list.sortedBy { it.age }.sortedBy { it.name })) //wrong
sortedWith
+ compareBy
(en prenant un vararg de lambdas) faites le tour:
val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))
Vous pouvez également utiliser la syntaxe de référence appelable un peu plus succincte:
val sortedList = list.sortedWith(compareBy(Person::age, Person::name))
Utilisez sortedWith
pour trier une liste avec Comparator
.
Vous pouvez ensuite construire un comparateur de plusieurs manières: