Rx java RxJava';s switchOnNext方法的行为与JavaDoc描述的不同

Rx java RxJava';s switchOnNext方法的行为与JavaDoc描述的不同,rx-java,Rx Java,rx.Observable.switchOnNext(Observable>)的行为与JavaDoc中描述的大理石图不同 如果我在下面试一试 public static void main(String[] args) throws Exception { Observable<Long> o1 = Observable.interval(200L, TimeUnit.MILLISECONDS); Observable<Long> o2 = Observable.

rx.Observable.switchOnNext(Observable>)的行为与JavaDoc中描述的大理石图不同

如果我在下面试一试

public static void main(String[] args) throws Exception {
  Observable<Long> o1 = Observable.interval(200L, TimeUnit.MILLISECONDS);
  Observable<Long> o2 = Observable.interval(500L, TimeUnit.MILLISECONDS)
        .map(value -> value * 10);

  Observable.switchOnNext(Observable.just(o1, o2)).subscribe(System.out::println);

  Thread.sleep(2000L);
}
但是结果变成0,10,20…等等,如下所示

| time   | 0   | 200  | 400   | 500  | 1000   | 1500 |.....|
|--------|-----|------|-------|------|--------|------|-----|
| o1     |     | 0    | 1     |....  | ...    | ...  | ... |
| o2     |     |      |       | 0    |  10    | 20   | ... |
| result |     |      |       | 0    |  10    | 20   | ... |
同样,如果我把o1倒转成o2,比如说可以观察到的,刚好(o1,o2)到可以观察到的,刚好(o2,o1), 结果是只发出o1的值

这是正确的行为吗

如果是乙醚错误或程序错误,我将创建问题

或者,我是否误解了描述


我使用的是rxjava1.1.5,我想Javadoc在这种情况下是正确的。你也必须把上面的水平线解释为时间。因此,您给
switchOnNext
的是一个
可观察的
,包含第一个
可观察的o1
,紧接着是另一个
可观察的o2
。因此,在大理石图中,左对角线表示
o1
,右对角线表示
o2
。因为后者紧跟在前者之后,所以前者被丢弃,这就是为什么您只在输出中看到后者

例如,要获得大理石图中的预期行为,您可以将
Observable.just(o1,o2)
替换为

Observable.timer(100L, TimeUnit.MILLISECONDS).map(l -> o1)
          .concatWith(Observable.timer(600L, TimeUnit.MILLISECONDS).map(l -> o2));
或者任何类似的东西


它的真正用途是在第二个可观察到的
中取消订阅,而改为订阅第二个。

我想Javadoc在这种情况下是正确的。你也必须把上面的水平线解释为时间。因此,您给
switchOnNext
的是一个
可观察的
,包含第一个
可观察的o1
,紧接着是另一个
可观察的o2
。因此,在大理石图中,左对角线表示
o1
,右对角线表示
o2
。因为后者紧跟在前者之后,所以前者被丢弃,这就是为什么您只在输出中看到后者

例如,要获得大理石图中的预期行为,您可以将
Observable.just(o1,o2)
替换为

Observable.timer(100L, TimeUnit.MILLISECONDS).map(l -> o1)
          .concatWith(Observable.timer(600L, TimeUnit.MILLISECONDS).map(l -> o2));
或者任何类似的东西


这一功能的真正用途是在第一个
可观察到的
出现时取消订阅,而改为订阅第二个。

感谢您的帮助!现在,我知道我误解了
switchOnNext
方法,我理解了
switchOnNext
。由于观测值是同时订阅的,所以结果并没有达到我的预期。谢谢你的帮助!现在,我知道我误解了
switchOnNext
方法,我理解了
switchOnNext
。由于观测值是同时订阅的,所以结果并没有达到我的预期。