RxJava棘手的startWith(Observable)

时间:2017-07-18 17:16:06

标签: java android rx-java reactive-programming rx-java2

以下代码仅在observable2完成后才从observable1中发出项目。

<td class="text-center"  ng-repeat="(key1,value1) in value">
       {{value1["95-95"]["Test Statistic"]}}                 
</td>

<td class="text-center" ng-repeat="(key1,value1) in value"> 
    {{value1["95-95"]["P-Value"]}}                   
</td>

<td class="text-center" ng-repeat="(key1,value1) in value">
    {{value1["95-95"]["Test Outcome"]}} 
</td>

我需要实现另一种行为

observable1.startWith(observable2)
           .subscribe()

第二个observable仅在第一个observable为空时发出项目,然后从第一个observable中发出项目。

我只能使用基本运算符找不到正确的解决方案,自定义运算符startWithDefault的RxJava 2实现应该是什么样的?

P.S。

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

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

是正确的解决方案,因为在observable1立即发出的情况下种族

1 个答案:

答案 0 :(得分:4)

方向很好,但您需要publish(Function)分享observable1的信号,concatEager以便在交换机出现时不丢失元素:

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