java - RxJava 2 : How to filter items of infinite stream that emits "List<Item>"?

标签 java android rx-java rx-java2

我有一个 Observable那永远不会结束。它发出 List<Item> .每次发出该列表时,我都需要过滤掉其中的一些项目。目前我有这个作为解决方案:

mData.getItemsObservable() // Observable<List<Item>>
        .compose(...)
        .flatMapSingle(items -> Observable.fromIterable(items)
                .filter(item -> item.someCondition())
                .toList())
        .subscribe(items -> {
            // ...
        }, error -> {
            // ...
        });

这是过滤掉某些项目的最佳方式吗?有没有更简单(更易读)的方法来做同样的事情?

我也试过这个,但它没有发出任何东西:

mData.getItemsObservable() // Observable<List<Item>>
        .compose(...)
        .flatMap(Observable::fromIterable) // or like this: flatMapIterable(items -> items)
        .filter(item -> item.someCondition())
        .toList()
        .subscribe(items -> {
            // ...
        }, error -> {
            // ...
        });

最佳答案

如果您想坚持使用 RxJava,第一种方法就可以了。否则,您可以使用 IxJava并直接在 map 操作中执行过滤:

mData.getItemsObservable() // Observable<List<Item>>
    .compose(...)
    .map(v -> Ix.from(v).filter(w -> w.someCondition()).toList())
    .subscribe(items -> {
        // ...
    }, error -> {
        // ...
    });

关于java - RxJava 2 : How to filter items of infinite stream that emits "List<Item>"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281952/

相关文章:

java - JDK 与 Android SDK (ASDK)?

android - 找不到 Gradle DSL 方法 : 'multiDexEnabled()'

android - 使用 Work Manager 时,BackoffPolicy.EXPONENTIAL 和 BackoffPolicy.LINEAR 之间有什么区别?

android - RxJava 在继续之前等待响应被检索

java - 如何在Java中链接到本地​​文件?

java - 如何通过命令使用 viewActions?

java - 请求的资源上不存在 'Access-Control-Allow-Origin' header 。错误

java - 每当在 Android Kotlin 中搜索搜索过滤器时,列表不会显示在 RecyclerView 中

rx-java - 在 Rx 中保持可观察状态的最佳方式

java - RxJava Observable 到 Completable,如何避免 toBlocking()