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