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()