Android RxJava - GroupBy 和合并回来?
Android RxJava - GroupBy and Merge back?
如何根据以下条件按日期排序对象列表:
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?
此时我确实按日期对它们进行了分组(在 'now' 之后和 'now' 之前),现在我需要将其合并回来并且 return a 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()
如何根据以下条件按日期排序对象列表:
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?
此时我确实按日期对它们进行了分组(在 'now' 之后和 'now' 之前),现在我需要将其合并回来并且 return a 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()