kotlin: 排序: 多字段指定升序降序排序
一,例子:
代码:
//处理按钮点击事件
binding.button5.setOnClickListener {
//second升序,first升序
val sortedValues = listOf(1 to "a", 2 to "b", 7 to "c", 6 to "d", 5 to "c", 6 to "e")
//两个升序
val sortedList = sortedValues.sortedWith(compareBy({it.first}, {it.second}))
println("升序+升序:"+sortedList)
//第一个降,第二个升
val sortedList2 = sortedValues.sortedWith(compareByDescending<Pair<Int, String>> { it.first}.thenBy<Pair<Int, String>>{it.second})
println("降序+升序:"+sortedList2)
//第一个升,第二个降
val sortedList3 = sortedValues.sortedWith(compareBy<Pair<Int, String>> { it.first}.thenByDescending<Pair<Int, String>>{it.second})
println("升序+降序:"+sortedList3)
//两个降序
val sortedList4 = sortedValues.sortedWith(compareByDescending<Pair<Int, String>> { it.first}.thenByDescending<Pair<Int, String>>{it.second})
println("降序+降序:"+sortedList4)
}
运行结果:
二,例子
代码:
//处理按钮点击事件
binding.button6.setOnClickListener {
//定义list
val sortedValues = listOf(1 to "a", 2 to "b", 7 to "c", 6 to "d", 5 to "c", 6 to "e")
//两个降序
val twoDesc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
if (u1.first != u2.first) {
u2.first.compareTo(u1.first) // first以降序排序
} else {
u2.second.compareTo(u1.second) // second以降序排序
}
}
println("降序+降序:"+sortedValues.sortedWith(twoDesc))
//升序+降序
val ascDesc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
if (u1.first != u2.first) {
u1.first.compareTo(u2.first) // first以升序排序
} else {
u2.second.compareTo(u1.second) // second以降序排序
}
}
println("升序+降序:"+sortedValues.sortedWith(ascDesc))
//升序+升序
val twoAsc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
if (u1.first != u2.first) {
u1.first.compareTo(u2.first) // first以升序排序
} else {
u1.second.compareTo(u2.second) // second以升序排序
}
}
println("升序+升序:"+sortedValues.sortedWith(twoAsc))
//降序+升序
val descAsc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
if (u1.first != u2.first) {
u2.first.compareTo(u1.first) // first以升序排序
} else {
u1.second.compareTo(u2.second) // second以降序排序
}
}
println("降序+升序:"+sortedValues.sortedWith(descAsc))
}
运行结果:
三,例子:
代码:
binding.button7.setOnClickListener {
data class User(val name: String, val age: Int)
val user1 = User("z", 23)
val user2 = User("bb", 9)
val user3 = User("d", 14)
val user4 = User("bb", 14)
val userList = mutableListOf(user4, user3, user2, user1)
//age升,name升
val list1 = userList.sortedWith(
compareBy(User::age).thenBy(User::name)
)
println("age升,name升:"+list1)
//age升,name降
val list2 = userList.sortedWith(
compareBy<User>{it.age}.thenByDescending<User>{it.name}
)
println("age升,name降:"+list2)
//age降,name降
val list3 = userList.sortedWith(
compareByDescending<User>{it.age}.thenByDescending<User>{it.name}
)
println("age降,name降:"+list3)
//age降,name升
val list4 = userList.sortedWith(
compareByDescending<User>{it.age}.thenBy<User>{it.name}
)
println("age降,name升:"+list4)
}
运行结果: