2017-07-18 39 views
2

以下代码仅在observable2完成后才会从observable1发出项目。RxJava棘手的开始With(Observable)

observable1.startWith(observable2) 
      .subscribe() 

我需要实现另一个行为

observable1 ->  0 1 2 3 
observable2 -> 1 2 3 4 5 6 

observable1.startWithDefault(observable2) 
      -> 1 2 0 1 2 3 

第二观察到发射项目仅在第一个观察的是空的,然后从第一个项目emited。

我找不到正确的解决方案,只使用基本的操作符,什么是正确的RxJava 2实现自定义操作符startWithDefault应该看起来像什么?

P.S.

observable1.subscribe() 
observable2.takeUntil(observable1).subscribe() 

不立即EMIT的情况下,从observable1

回答

4

方向是好的,因为比赛的正确的解决方案,但你需要publish(Function)分享observable1的信号,concatEager,以不失去它的元素时,开关附件:

observable1.publish(o -> 
    Observable.concatEager(observable2.takeUntil(o), o) 
) 
.subscribe(...)