Сортировка коллекции по нескольким полям в Котлине [дубликат]
этот вопрос уже есть ответ здесь:
- Как сортировать на основе / сравнить несколько значений в Котлине? 1 ответ
допустим, у меня есть список людей, которые мне нужно отсортировать по возрасту, а затем по имени.
исходя из C#-фона, я могу легко достичь этого на указанном языке с помощью Линк:
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();
Как это сделать с помощью Kotlin?
это то, что я пробовал (это явно неправильно, так как выход первого предложения "sortedBy" переопределяется вторым, что приводит к списку, отсортированному только по имени)
val sortedList = ArrayList(list.sortedBy { it.age }.sortedBy { it.name })) //wrong
2 ответа:
sortedWith
+compareBy
(берут количеством аргументов лямбды) сделать трюк:val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))
вы также можете использовать несколько более краткий синтаксис вызываемой ссылки:
val sortedList = list.sortedWith(compareBy(Person::age, Person::name))
использовать
sortedWith
для сортировки списка с помощьюComparator
.затем вы можете построить компаратор, используя несколько способов: