RxJava:观察set是否达到0个元素



当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() -阻塞,直到可观察对象发出一个项或完成,然后返回可观察对象发出的第一个项,如果可观察对象没有发出项则返回默认项

相关内容

  • 没有找到相关文章

最新更新