android - Kotlin根据内部列表中的参数对列表进行排序
问题描述
我有一个列表列表,我想根据内部列表中的日期值对其进行排序。这是我的清单示例:
ClassA(id: String, classb : List<ClassB>)
和 ClassB 是ClassB(id: String, date: Date)
所以我有 ClassA 列表,其中还包含 ClassB 列表,我想根据内部 classB 中日期的降序对列表进行排序/排序
解决方案
假设如下:
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
) 如下:
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
-objects 的新列表...如果您不希望这样做,这仍然可以作为起点):val listOfAWithOrderedB = listOfA.map { it.copy(bs = it.bs.sortedByDescending(B::date)) }
这导致:
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>>
(再次......可能的起点)如下:(B(date=2019-09-29, id=11), 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(date=2019-09-25, id=2), 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)) (B(date=2019-09-24, id=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)) (B(date=2019-09-23, id=3), 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)) (B(date=2019-09-23, id=7), 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)) (B(date=2019-09-23, id=10), 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(date=2019-09-22, id=6), 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)) (B(date=2019-09-21, id=5), 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)) (B(date=2019-09-19, id=9), 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))
推荐阅读
- jsf - 更新 primefaces 父组件,而不重新渲染其数据表子组件
- html - 在angularjs中编辑syncfusion Grid中的列样式
- python - ValueError:层序贯_1的输入0与层不兼容
- python - 当player_rect和door_rect在pygame中接触时,我如何显示打开的门
- python - 如何将 say_whee 函数转换为 lambda?
- ffmpeg - 为什么ffmpeg转YUV420这么差?
- mongodb - 无法在已安装的磁盘上运行 MondoDB
- java - 从其他 cmd 窗口停止 minecraft 服务器
- apache - 重定向到 https 会产生奇怪的结果
- azure - Azure Web App 工作内存集与应用服务计划内存使用情况