【发布时间】:2017-07-24 13:28:20
【问题描述】:
我有一个永远不会结束的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 -> {
// ...
});
【问题讨论】:
-
除了使用IxJava之外,第一种方式就是那个。第二个不会完成,因为您展开每个列表项并且它们是无限的; toList 需要像第一种情况的 flatMapSingle 内的有限的。
-
@akarnokd 感谢您的解释。所以如果我理解正确,第一种方法是过滤掉项目的方法?它看起来不如第二种方法。有什么可以改进的吗?谢谢
标签: java android rx-java rx-java2