【问题标题】:Create a filtered observable from 2 observable of list of items in RxJava从 RxJava 中的 2 个 observable 项目列表创建一个过滤后的 observable
【发布时间】:2018-11-18 12:35:35
【问题描述】:

我正在开发一项功能,我需要根据本地数据库数据过滤掉网络响应数据。

例如,我的网络层返回一个项目列表,而我的数据库层返回一个可观察的 id 列表。现在我只想从网络层返回那些 id 与数据库层响应中的任何人匹配的对象。

以下代码从网络获取数据并将结果保存到数据库(缓存)。

factory.getRemoteDataStore()
                .searchForVenues(query)
                .toObservable()
                .distinctUntilChanged()
                .flatMap { venues ->
                    factory.getCacheDataStore()
                            .saveVenues(venues)
                            .andThen(Observable.just(venues))
                }

我还有一个方法可以返回需要过滤的场所列表

factory.getCacheDataStore().getDislikedVenues()

现在,如何扩展之前的链以使用 getDislikedVenues() Observable 从网络响应的响应中过滤它们?

抱歉这个菜鸟问题,我真的很挣扎。

【问题讨论】:

    标签: android rx-java observable rx-java2 rx-kotlin


    【解决方案1】:

    一种方法是

    factory.getCacheDataStore().getDislikedVenues()
        .flatMap { dislikedItems -> 
            factory.getRemoteDataStore()
                .searchForVenues(query)
                .toObservable()
                .distinctUntilChanged()
                .flatMapIterable { it }
                .filter { !dislikedItems.contains(it.id) }
                .toList()
                .toObservable()
        }
        .flatMap { venues ->
            factory.getCacheDataStore()
                .saveVenues(venues)
                .andThen(Observable.just(venues))
        }
    

    P.S.:据我了解,factory.getRemoteDataStore().searchForVenues(query) 返回SingleMaybe。在这种情况下,distinctUntilChanged() 不起作用,因为它依赖于多个发射 (onNext()),但 SingleMaybe 只能发射一个结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多