如何通过以下条件按日期排序对象列表:

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

10-08 18:33