Android RxJava – GroupBy和合并回来?

我如何按照以下标准排列对象的列表:

1)日期> =今天的所有对象

2)日期<今天的所有对象

例:

今天= 7/2月

List = [{5/2月,8/2月,6/2月,4/2月,9/2月]]

预期成果= [{8/2月9日/ 2月6日/ 2月5日/ 2月4日/ 2月]}

我吃了什么:

dummyProvider .getAllObjects() .map(mapper::mapToDateObject) //Convert to new object -> DateObject .groupBy(dateObject -> dateObject.getDateTime().isAfterNow()) //What now? 

在这个时候,我确实按照日期(在'now'之后,'now'之前)将它们Single<List<DateObject>> ,现在我需要将它合并回来并返回一个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()