【问题标题】:Sorting custom object List in kotlin在 kotlin 中对自定义对象列表进行排序
【发布时间】:2021-07-11 15:05:12
【问题描述】:
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<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
    }

我有一个包含备忘录和活动数据的主列表。我想用 updateTime 归档这个列表。我使用了 sortedBy 功能,但在我的情况下它不起作用。有人知道如何对列表进行排序吗?

【问题讨论】:

  • 为什么sortedBy 不适合你?您实际上并未将结果分配给代码中的任何内容,这不是就地排序。

标签: android sorting kotlin arraylist


【解决方案1】:

你想要sortBy(对列表进行适当的排序)而不是sortedBy(返回一个排序的副本,你基本上是丢弃)

另外,如果updateTime 是所有Feeds 共有的东西,为什么不把updateTime 放在界面中呢?这样你就不需要做任何类型检查——你有一个Feeds 的列表,它们有一个updateTime,所以你可以对它们都按it.updateTime 排序:

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)

或者,如果您有这些类的超类,您可以在其中使用默认的 null 值定义属性(不能在接口中这样做,这就是为什么您需要 override 并提供实现它的每个类中的值)

【讨论】:

  • 您不能按可空值排序。
  • @Tenfour04 你可以吗?空值在列表中排在第一位 - pl.kotl.in/SKDs9HlkB
  • 哇,我从来没有意识到。永远不要假设。
  • Kotlin 在修复不起眼的 null 方面做得很好!
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多