在onCompleted中获取可观察目标

时间:2016-09-20 13:39:52

标签: java rx-java

我需要触发几个可观察的可观察的类,然后知道它们的所有类都已达到onCompleted状态。

我当前的appraoch是通过在启动时将它们添加到集合来跟踪RxJava observable的完成,然后我想在它们的onCompleted()方法触发时从集合中删除它们。

如何从onCompleted获取可观察对象本身?

我订阅如此:

c.event().subscribe(this);

this表示的对象实现了Observer,并且具有onCompleted方法。

如何在this.onCompleted()中获取可观察目标?

根据Tassos Bassoukos的建议,我尝试了以下解决方案,但它没有做任何事情:

Set<Observable<Void>> obs = new HashSet<Observable<Void>>();
//...
c.event().subscribe(this);
obs.add(c.event());
c2.event().subscribe(this);
obs.add(c2.event());
//...
Observable.merge(obs).lastOrDefault(null).doOnNext(foo -> {
    System.out.println("All Observers Done");
});

所有观察者完成消息永远不会打印,尽管每个观察者都已达到onCompleted()方法。

1 个答案:

答案 0 :(得分:1)

  

我需要触发几个可观察的类来进行操作,然后知道它们何时都达到了onCompleted状态。

Observable.merge(A,B,C).lastOrDefault(null).doOnNext(dummy -> {...})

但是,您可能希望使用函数样式,如果源可观察元素具有相同数量的元素,并且您希望对其结果执行某些操作:

Observable.zip(A,B,C, (a,b,c) -> {....});

编辑:哦,现在我明白了 - 试试这个:

Observable
.merge(c1.ecent(), c2.event())
.doOnCompleted(() -> System.out.println("All Observers Done"))
.subscribe(this);