你说得对,
myList.sortedBy{it.isFavorite}.sortedBy{ it.createdDate}
不会给你正确的结果,因为它基本上等于
myList.sortedBy{ it.createdDate}
(仅应用最后一个排序)。您需要的是一个比较器,它考虑了多个字段,看起来像
compareBy
你需要的是:
使用函数序列创建比较器以计算比较结果。函数按顺序调用,接收给定的值a和b并返回可比较的对象。当函数返回的a和b值的可比较实例不相等时,比较结果将从比较器返回。
所以,看看这个:
data class MRecord(
var id: Long,
var isFavorite: Boolean,
var createdDate: Long
)
fun main(args: Array<String>) {
val list = listOf(
MRecord(1, true, 10),
MRecord(2, false, 20),
MRecord(3, true, 30)
)
println(list)
println(list.sortedWith(compareBy({ !it.isFavorite }, MRecord::createdDate)))
}
注意如何混合lambdas和函数引用。
编辑
Long
我最喜欢
:
data class MRecord(
var id: Long,
var isFavorite: Long,
var createdDate: Long
)
fun main(args: Array<String>) {
val list = listOf(
MRecord(1, 1, 100),
MRecord(2, 0, 200),
MRecord(3, 1, 300)
)
println(list.sortedWith(compareByDescending<MRecord> { it.isFavorite }.then(compareBy(MRecord::createdDate))))
}