Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Kotlin中的Anko对基于两个字段的表进行排序?_Kotlin_Anko - Fatal编程技术网

如何使用Kotlin中的Anko对基于两个字段的表进行排序?

如何使用Kotlin中的Anko对基于两个字段的表进行排序?,kotlin,anko,Kotlin,Anko,我使用Anko操作SQLite表,我希望首先根据字段isFavorite对列表进行排序,然后根据createdDate 例如,输入源数据,我得到排序结果数据 但是代码返回myList.sortedBy{it.isFavorite}.sortedBy{it.createdDate}无法得到正确的结果,我如何修复它 源数据 对结果数据进行排序(我希望得到) 结构 data class MRecord ( var _id: Long, var isFavorite: Bo

我使用Anko操作SQLite表,我希望首先根据字段
isFavorite
对列表进行排序,然后根据
createdDate

例如,输入源数据,我得到排序结果数据

但是代码
返回myList.sortedBy{it.isFavorite}.sortedBy{it.createdDate}
无法得到正确的结果,我如何修复它

源数据

对结果数据进行排序(我希望得到)

结构

data class MRecord (
    var _id: Long,     
    var isFavorite: Bool,   
    var createdDate: Long
)
var myList=select(tableName).parseList { MDBRecord(HashMap(it)) }        
return myList.sortedBy{it.isFavorite}.sortedBy{ it.createdDate}
代码

data class MRecord (
    var _id: Long,     
    var isFavorite: Bool,   
    var createdDate: Long
)
var myList=select(tableName).parseList { MDBRecord(HashMap(it)) }        
return myList.sortedBy{it.isFavorite}.sortedBy{ it.createdDate}
添加内容

致疯子:谢谢

data class MRecord(
    var id: Long,
    var isFavorite: Long,
    var createdDate: Long
)


val list = listOf(
        MRecord(1, 1, 100),
        MRecord(2, 0, 200),
        MRecord(3, 1, 300)
)
我希望得到结果

1, 1, 100
3, 1, 300
2, 0, 200

但是代码
println(list.sortedWith(compareBy({!it.isFavorite},MRecord::createdDate))
将无法工作,因为isFavorite很长,我如何修复它?

你是对的,
myList.sortedBy{it.isFavorite}.sortedBy{it.createdDate}
将不会给出正确的结果,因为它基本上等于
myList.sortedBy{it.createdDate}
(只有最后一个排序适用)。您需要的是一个考虑多个字段的比较器,看起来就像您需要的:

使用函数序列创建比较器以计算比较结果。函数按顺序调用,接收给定值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)))
}

谢谢!你的代码运行得很好,但是如果我希望得到createdDate的降序结果,我该怎么做呢?顺便说一下,list.sortedWith(compareBy({!it.isFavorite},MRecord::createdDate.reverse))不是workTry
list.sortedWith(compareBy{!it.isFavorite}。然后降序(compareBy(MRecord::createdDate)))
谢谢!请查看我在问题中添加的内容好吗?