Dim*_*ima 0 android rx-java rx-android
假设我有两个可观测量:A和B发射物品:A:1,2,3,4,5 B:2,4,6
有没有办法通过删除也是第二序列的项目来过滤第一个序列?
[edit]所需的数据流:从可观察的B(bList)加载所有项目,然后从A加载项目,根据标准过滤它们:!bList.contains(item)
RxJava提供了许多过滤运算符.
具体来说,你想要的distinct().如果要为对象定义自己的相等性检查,则可以传递检查项目相等性的函数.
请注意,在内部,distinct()使用a跟踪对象HashSet,因此如果对象没有正确散列(例如,两个"相等"对象没有相同的哈希代码),那么您将需要使用该可选参数来定义自己的独特性检查.
如果您没有组合流,那么您只想使用filter(),并在您的过滤功能中检查您的Obeservable是否已经发出该项.在这种情况下,您的一个Observable 必须在第二个可以被过滤之前完成,因为RxJava无法预测将要发出的项目的未来.
例如:
Observable a = Observable.just(1, 2, 3, 4);
Observable b = Observable.just(3, 4, 5, 6);
// If you simply want a list of distinct items:
Observable uniqueItems = a.merge(b).distinct()
// If you just want to filter "a" so it contains none of the items in "b"
Observable filteredA = b.toList().flatMap(itemsInB -> {
a.filter(item -> !itemsInB.contains(item));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3802 次 |
| 最近记录: |