对包含两种类型的数据类的ArrayList <Any>进行排序

时间:2019-10-09 13:06:41

标签: android sorting kotlin arraylist

所以我的问题是我有一个包含两种类型数据的ArrayList。第一个是以下类:

data class TextMessage (
    val content: String,
    val date: Date,
    val type: Int
)

第二个类仅更改内容类型。因此,我正在创建一个包含这两种数据的列表,我想使用日期值对它们进行排序,这两种类型都包含它,但是我没有找到任何可以帮助我的解决方案,实际上我不知道不知道是否可以这样做,因为几天前我开始学习Kotlin。

我希望有人能帮助我。 谢谢,再见。

1 个答案:

答案 0 :(得分:4)

最好让两个类共享某种超级类型。例如界面。然后,您可以在接口中定义通用属性。像这样:

interface Message {
    val date: Date
}

data class TextMessage (
    val content: String,
    override val date: Date,
    val type: Int
) : Message


data class OtherMessage (
    override val date: Date
) : Message

您可以通过以下操作对Message的列表进行排序:

val sortedList = listOfMessages.sortedBy { it.date }

如果您不能像这样更改类,则必须依靠可能引发异常的检查。像这样:

val sortedList = listOfAny.sortedBy {
    when(it) {
        is TextMessage -> it.date
        is OtherMessage -> it.date
        else -> throw IllegalArgumentException("Unknown type for sorting!")
    }
}