Kotlin基于内部列表中的参数对列表进行排序

时间:2019-09-24 09:23:26

标签: android list kotlin

我有一个要基于内部列表中的日期值排序的列表列表。这是我的列表示例:

ClassA(id: String, classb : List<ClassB>)并且ClassB是ClassB(id: String, date: Date),所以我有ClassA列表,其中也包含ClassB列表,我想根据内部classB中日期的降序对列表进行排序/排序

2 个答案:

答案 0 :(得分:1)

假设以下内容:

az group show --name

和列表(val int = AtomicInteger(0) data class A(val bs: List<B>, val id: Int = int.incrementAndGet()) data class B(val date: LocalDate, val id: Int = int.incrementAndGet()) )如下:

listOfA
  1. 仅对类A(bs=[B(date=2019-09-24, id=1), B(date=2019-09-25, id=2), B(date=2019-09-23, id=3)], id=4) A(bs=[B(date=2019-09-21, id=5), B(date=2019-09-22, id=6), B(date=2019-09-23, id=7)], id=8) A(bs=[B(date=2019-09-19, id=9), B(date=2019-09-23, id=10), B(date=2019-09-29, id=11)], id=12) 的元素进行排序(实际上,我创建了一个具有全新B对象的新列表...如果您不希望这样做,那么它仍然可以作为一个开始点):

    A

    导致:

    val listOfAWithOrderedB = listOfA.map {
      it.copy(bs = it.bs.sortedByDescending(B::date))
    }
    
  2. 按所有A(bs=[B(date=2019-09-25, id=2), B(date=2019-09-24, id=1), B(date=2019-09-23, id=3)], id=4) A(bs=[B(date=2019-09-23, id=7), B(date=2019-09-22, id=6), B(date=2019-09-21, id=5)], id=8) A(bs=[B(date=2019-09-29, id=11), B(date=2019-09-23, id=10), B(date=2019-09-19, id=9)], id=12) 日期排序,并保留对实际B的引用:

    A

    导致val bSortedByDateAndTheirA = listOfA.flatMap { anA -> anA.bs.map { it to anA } } .sortedByDescending { (b) -> b.date } (同样是一个可能的起点),如下所示:

    List<Pair<B, A>>

答案 1 :(得分:0)

您可以使用比较器来使用此代码...这里是您可以使用的代码示例

比较器对象

companion object : Comparator<MyDate> {

override fun compare(a: MyDate, b: MyDate): Int = when {
    a.year != b.year -> a.year - b.year
    a.month != b.month -> a.month - b.month
    else -> a.day - b.day
}}

日期模型类

data class MyDate (val year: Int, val month: Int, val day: Int) {}

这就是您进行排序的方式

fun main(args: Array<String>) {
val myDates = listOfdays
myDates.sortedWith(CompareObjects).forEach { 

    add sorted list
}}