如何根据以下条件按日期排序对象列表:
1) 所有日期 >= 今天的对象
2) 日期为<今天的所有对象
示例:
今天 = 2 月 7 日
List = [{5/Feb, 8/Feb, 6/Feb, 4/Feb, 9/Feb}]
Expected Result =[{ 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(...)
但是在 Kotlin 中使用 groupBy
的解决方案更优雅:
dummyProvider
.getAllObjects()
.map(mapper::mapToDateObject)
.groupBy { it.getDateTime().isAfterNow() }
.toList()
.flatMapObservable { list ->
list.first { it.key }.sorted { ... }
.concatWith(list.first { !it.key }.sorted { ... }) }
.toList()
关于java - Android RxJava - GroupBy 和合并回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087776/