如何通过以下条件按日期排序对象列表:
1)日期> =今天的所有对象
2)日期
示例:
今天= 2月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?
目前,我确实按日期(在“现在”之后和“现在”之前)对它们进行分组,现在我需要将其合并回并返回
Single<List<DateObject>>
。 最佳答案
我认为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()