kotlin: 排序: sortWith/sortedWith
一,功能
sortedWith
- 功能:通过
Comparator
或compareBy
函数对集合进行排序,支持多条件排序。 - 参数:接受一个
Comparator
对象或compareBy
函数(用于创建比较器)。 - 特点:返回排序后的新列表,不会修改原列表。
sortWith
- 功能:通过
Comparator
或compareBy
函数对集合进行排序,支持多条件排序。 - 参数:接受一个
Comparator
对象或compareBy
函数(用于创建比较器)。 - 特点:直接修改原列表,不会返回新列表。
二,例子
代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
val text = listOf("one", "two", "three", "four")
//我们也可以使用 with自定义compareBy,默认两个元素是相同类型的才行
println("按长度升序:"+text.sortedWith(compareBy { it.length }))
//降序
println("按长度降序:"+text.sortedWith(compareByDescending { it.length }))
}
运行结果:
三,例子
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
val xx1 = listOf(1, 0, 23, 54, 5, 12, 54)
val xx2 = listOf(3, 34, 43, 14, 98, 75, 92)
val xx3 = listOf(1, 0, 2, 7, 4, 2, 3)
//升序
val sortAsc = Comparator { i1: Int, i2: Int -> i1 - i2 }
println("升序排序后:")
println(xx1.sortedWith(sortAsc))
println(xx2.sortedWith(sortAsc))
println(xx3.sortedWith(sortAsc))
//降序
println("降序排序后:")
val sortDesc = Comparator { i1: Int, i2: Int -> i2 - i1}
println(xx1.sortedWith(sortDesc))
println(xx2.sortedWith(sortDesc))
println(xx3.sortedWith(sortDesc))
}
运行结果:
四,例子:
代码:
//处理按钮点击事件:
binding.button3.setOnClickListener {
val origins = listOf("aaa", "c", "bb", "dd")
//sortedWith() + Comparator自定义顺序进行比较
val lengthComparator = Comparator { o1: String, o2: String -> o1.length - o2.length }
println("长度升序:"+origins.sortedWith(lengthComparator)) //[c, bb, aaa]
//继续简化
println("长度升序:"+origins.sortedWith(compareBy { it.length })) //[c, bb, aaa]
}
运行结果:
五,例子:
代码:
//处理按钮点击事件
binding.button4.setOnClickListener {
val origins = listOf("aaa", "c", "bb", "dd")
//按两个字段排序,默认都是升序
val sortedWith = origins.sortedWith(
compareBy<String> { it.length }.thenBy { it }
)
println("sortedWith排序后:"+sortedWith) //
val origins2 = mutableListOf("aaa", "c", "bb", "dd")
println("未排序前:"+origins2)
//按两个字段排序,默认都是升序
origins2.sortWith(
compareBy<String> { it.length }.thenBy { it }
)
println("排序后:"+origins2) //
}
运行结果: