java - Android RxJava - GroupBy 和合并回来?

标签 java android rx-java rx-java2

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

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? 

此时我确实按日期对它们进行了分组(在“现在”之后和“现在”之前),现在我需要将其合并并返回一个 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()

关于java - Android RxJava - GroupBy 和合并回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087776/

相关文章:

android - 在 Google Paging Library 3 中没有任何滚动的情况下,Api 调用不会一次又一次地停止调用

java - 为什么使用 long 时,20 以上的阶乘在 java 中不起作用?

java - 在 Java 代码中使用 libsvm 在移动设备中执行预测

android - 更改微调器的背景颜色隐藏下拉箭头

android - 为 Google 的 Project Glass 编写代码,学习 Google Android for mobile 是正确的选择吗?

java - 使用 RxJava 跳过最后一个重复项

java - 响应式(Reactive)编程中的订阅是什么

java - 启动 .war 服务时 tomcat 8 失败

java - JPanels 的负坐标(并且缺乏与 Timer 的配合)

android - 在 android 2.1 中使用 NFC?