kotlin - 在 Kotlin 中按多个字段对集合进行排序

假设我有一个人员列表,我需要先按年龄排序,然后按姓名排序。

来自 C#-background,我可以通过使用 LINQ 轻松地在上述语言中实现这一点:

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

最佳答案

sortedWith + compareBy (采用 lambda 的可变参数)就可以了:

val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))

您还可以使用更简洁的可调用引用语法:

val sortedList = list.sortedWith(compareBy(Person::age, Person::name))

https://stackoverflow.com/questions/37259159/

相关文章:

collections - Kotlin 的列表缺少 "add"、 "remove"、 map 缺少

kotlin - Kotlin 中的惯用登录方式

dictionary - 如何在 Kotlin 中将列表转换为 map ?

java - Java 的 String[] 的 Kotlin 等价物是什么?

inheritance - 在 Kotlin 中扩展数据类

kotlin - 什么是 Kotlin 双键 (!!) 运算符?

kotlin - 在 Kotlin 中试用资源

kotlin - 为什么我们使用 "companion object"作为 Kotlin 中 Jav

design-patterns - 如何在 Kotlin 中实现 Builder 模式?

kotlin - 如何在 Kotlin 中将 String 转换为 Long?