RxJava Observable combine最大的重置状态

时间:2015-07-02 19:50:33

标签: rx-java

基于官方文档中的漂亮图表,combineLatest http://reactivex.io/documentation/operators/combinelatest.html

我想知道是否有办法,比如当我收到" C"从第二个Observable,我想清除第一个和第二个Observable中的状态。这样当" D"从第二个Observable到达,它将不再与" 2"从第一个Observable开始,但等到" 3"到达。

1 个答案:

答案 0 :(得分:1)

解决您确切问题的方法是发布每个来源,直到触发值,然后将您的链重新订阅到来源:

PublishSubject<Integer> a = PublishSubject.create();
PublishSubject<String> b = PublishSubject.create();

ConnectableObservable<Integer> ap = a.publish();
ConnectableObservable<String> bp = b.publish();
Observable.combineLatest(
        ap, bp,
        Pair::of
)
.takeUntil(p -> "C".equals(p.second))
.repeat(2)
.subscribe(System.out::println)
;

ap.connect();
bp.connect();

a.onNext(1);
b.onNext("A");
a.onNext(2);
b.onNext("B");
b.onNext("C");

a.onNext(3);
b.onNext("D");

这样,您就可以终止第一个会话&#39;组合并开始一个新的。