当Set达到0个元素时,发现什么是RxJava惯用方法?
我看过这个答案:How can I create an Observer over a dynamic list in RxJava?,我可以看到如何使用自定义HashSet
包装ObservableHashSet
,然后在remove()方法中,如果大小为0,请致电onCompleted
。
这是正确的方法吗?是否有更简单/内置的方法?
答案 0 :(得分:1)
非常。
虽然你可以写一个装饰器,并且不修改委托未修改的方法。然后你可以在TreeSet
等上使用它。
另外,也许您可以添加sizeAsObservable()
(大小()()
然后你可以过滤它。
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)
否则,如果您可以控制删除,只需检查或在那里跟踪它!
答案 1 :(得分:0)
请参阅rxJava的Blocking Observable Operators wiki页面。
使用 first( ) 和 firstOrDefault( ) ,您可以:
first() - 阻止直到Observable发出一个项目,然后返回Observable发出的第一个项目
firstOrDefault() - 阻止直到Observable发出项目或完成,然后返回Observable发出的第一个项目或者如果Observable没有发出项目则返回默认项目
我希望它对你有帮助。