如何按以下标准按日期订购对象列表:
1)日期> =今天
的所有对象2)日期<今天
示例:
今天= 7月/ 2月
列表= [{5 / Feb,8 / Feb,6 / Feb,4 / Feb,9 / Feb}]
预期结果= [{8 / Feb,9 / Feb,6 / Feb,5 / Feb,4 / Feb]}
我现在吃了什么:
dummyProvider
.getAllObjects()
.map(mapper::mapToDateObject) //Convert to new object -> DateObject
.groupBy(dateObject -> dateObject.getDateTime().isAfterNow())
//What now?
此时我按照日期(现在'现在'之后'现在')对它们进行分组,现在我需要将其合并并返回{{1} }。
答案 0 :(得分:2)
在我看来,groupBy
的解决方案会因你的情况而过于复杂。你可以在没有groupBy
的情况下完成:
dummyProvider
.getAllObjects()
.map(mapper::mapToDateObject)
.toList()
.flatMapObservable(list ->
//emit dateObjects afterNow first
Observable.fromIterable(list)
.filter(dateObject -> dateObject.getDateTime().isAfterNow())
//you did't mention this in your criteria, but according
//to expected result I assume that you need sorted items on each side
.sorted(...)
//then emit dateObjects != afterNow
.concatWith(
Observable.fromIterable(list)
.filter(dateObject -> !dateObject.getDateTime().isAfterNow())
.sorted(...)))
.toList()
.subscribe(...)
但使用groupBy
的 Kotlin 解决方案更优雅:
dummyProvider
.getAllObjects()
.map(mapper::mapToDateObject)
.groupBy { it.getDateTime().isAfterNow() }
.toList()
.flatMapObservable { list ->
list.first { it.key }.sorted { ... }
.concatWith(list.first { !it.key }.sorted { ... }) }
.toList()