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

标签 android sorting kotlin arraylist

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

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

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

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

最佳答案

您最好希望这两个类共享一些父类(super class)型。例如一个接口(interface)。然后,您可以在界面中定义通用属性。像这样:

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!")
    }
}

关于android - 对包含两种数据类的 ArrayList<Any> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58304876/

相关文章:

java - 如何在不点击屏幕的情况下放置对象

android - 处理程序或监听器。什么是更好的?

android - 内容 ://sms/in 1. 6+ 上的 ContentObserver?

c++ - 在 Map c++​​ 中对 vector 进行排序

perl - 在 Perl 中,如何按值的频率排序?

c++ - 如何使用 sort 对类中的 vector 进行排序

data-structures - 在Kotlin中初始化LongArray的数组

android - 我如何从 Gradle 测试中排除 Android 项目子模块的测试

c# - 在unity3d中访问android jar

android - 如何在运行时更改实现