假设我有两个可观察对象:A和B,它们发出项:A: 1,2,3,4,5B: 2、4、6
是否有一种方法通过删除也在第二个序列中的项目来过滤第一个序列?
[编辑]所需的数据流:从可观察对象B (bList)加载所有项,然后从A加载项,并根据条件对它们进行过滤:
RxJava提供了许多过滤操作符。
具体来说,您想要distinct()
。如果你想为你的对象定义相等性检查,你可以传递一个检查项是否相等的函数。
注意,在内部,distinct()
使用HashSet
跟踪对象,所以如果你的对象没有正确哈希(例如,两个"相等"的对象没有相同的哈希码),那么你将需要使用可选参数来定义你自己的独特性检查。
如果您没有组合流,那么您只想使用filter()
,并在过滤函数中检查您的observable是否已经发出该项。在这个场景中,一个observable 必须在第二个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));
}