当Set达到0个元素时,RxJava惯用的发现方法是什么?
我看过这个答案:我如何在RxJava中创建一个动态列表上的观察者?,我可以看到如何用自定义ObservableHashSet
包装HashSet
,然后在remove()方法中,如果大小为0,调用onCompleted
。
这是正确的方式吗?有没有更简单/内置的方法?
差不多。
虽然你可以写一个装饰器,并委托未修改的方法不变。然后你可以使用它在TreeSet
等。
另外,也许你可以添加sizeAsObservable()
(size()被占用):然后你可以过滤。
class ObservableSet implements Set<T> {
private final Set<T> set;
private final BehaviorSubject<T> sizeSubject = BehaviorSubject.create(); //
public ObservableSet(Set<T> set) {
this.set = set;
subject.onNext(set.size());
}
public Observable<Integer> sizeAsObservable() {
return sizeSubject.asObservable();
}
public add(T t){
set.add(t);
sizeSubject.onNext(set.size());
}
...
}
…如果您只想要空的,则只过滤0,并跳过第一个结果,因为您说过您只对集合变为空时感兴趣。
obsSet.sizeAsObservable().skip(1).filter(size -> size == 0)
否则,如果您可以控制删除,只需检查或跟踪它!
参见rxJava的Blocking Observable Operators wiki页面。
通过使用<<p> strong>第()和 firstOrDefault () ,您可以:first() -阻塞直到Observable发出一个item,然后返回Observable发出的第一个item
firstOrDefault() -阻塞,直到可观察对象发出一个项或完成,然后返回可观察对象发出的第一个项,如果可观察对象没有发出项则返回默认项