RxJava 2:如何过滤发出“List <item>”的无限流项?

时间:2017-07-24 13:28:20

标签: 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 -> {
            // ...
        });

1 个答案:

答案 0 :(得分:1)

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

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