Android 在kotlin中对自定义对象列表进行排序
正如上面的代码一样,我创建了一个接口,并在其他两个类中对其进行了扩展Android 在kotlin中对自定义对象列表进行排序,android,sorting,kotlin,arraylist,Android,Sorting,Kotlin,Arraylist,正如上面的代码一样,我创建了一个接口,并在其他两个类中对其进行了扩展 interface Feed class Memo : Feed { var memoId: String? = null var updateTime: String? = null // other fileds } class Activity : Feed { var activityId: String? = null var updateTime: String? = nu
interface Feed
class Memo : Feed {
var memoId: String? = null
var updateTime: String? = null
// other fileds
}
class Activity : Feed {
var activityId: String? = null
var updateTime: String? = null
// other fileds
}
var mainFeedList:ArrayList=ArrayList()
var memoList:ArrayList=ArrayList()
变量ActivityList:ArrayList=ArrayList()
fun arrangeFeedDataOrder(){
mainFeedList.addAll(备忘录列表)
mainFeedList.addAll(活动列表)
mainFeedList.sortedBy{
什么时候{
是活动->{
更新时间
}
是备忘录->{
更新时间
}
其他->{
无效的
}
}
}
//不能在排序代码以上工作
}
我有包含备忘录和活动数据的主列表。我想用updateTime字段对该列表进行排序。我使用了sortedBy函数,但它在我的情况下不起作用。有人知道如何对列表进行排序吗?您希望通过
排序(对列表进行适当排序),而不是通过排序(返回排序后的副本,您基本上会丢弃该副本)
另外,如果所有的Feed
s都有updateTime
,为什么不把它放在界面中呢?这样,您就不需要进行任何类型检查-您有一个Feed
s的列表,它们有一个updateTime
,因此您只需按it排序即可。updateTime
对所有它们进行排序:
var mainFeedList: ArrayList<Feed> = ArrayList()
var memoList: ArrayList<Memo> = ArrayList()
var ActivityList: ArrayList<Activity> = ArrayList()
fun arrangeFeedDataOrder() {
mainFeedList.addAll(memoList)
mainFeedList.addAll(ActivityList)
mainFeedList.sortedBy {
when (it) {
is Activity -> {
it.updateTime
}
is Memo -> {
it.updateTime
}
else -> {
null
}
}
}
// Not work above code for sorting
}
或者,如果这些类有一个超类,您可以在其中使用默认的null
值定义属性(在接口中不能这样做,这就是为什么您需要覆盖
并在实现它的每个类中提供一个值)为什么sortedBy
不适合您?实际上,您没有将结果分配给代码中的任何内容,它不是就地排序。您不能按可空值进行排序。@Tenfour04您可以吗?空值在列表中排名第一-哇,我从来没有意识到。永远不要妄想。科特林正在做很好的工作来修复这个卑微的空人!
interface Feed {
var updateTime: String?
}
class Memo : Feed {
var memoId: String? = null
override var updateTime: String? = null
}
class Activity : Feed {
var activityId: String? = null
override var updateTime: String? = null
}
...
mainFeedList.sortBy { it.updateTime } // or sortBy(Feed::updateTime)