根据条件{r}退出rxjava中的Observable.zip

时间:2019-01-28 18:17:53

标签: java rx-java rx-java2

在RXJava中,我有2个可观察对象,它们是来自2个下游调用的响应。一个下游调用是一个长轮询调用,另一个是短轮询并立即返回。 我正在使用Observable.zip合并两个响应的响应。以下代码可以正常工作。

Observable
 .zip(observable1, observable2)
 .flatMap(update -> foo(update));

现在我要实现的是,如果短的下游调用(observable1)的输出不包含特定值,则跳过zip,即不要等待更长的下游调用(observable2)的输出。 我尝试通过以下方式实现它,但如果条件为true,则它不会使用observable2压缩,但它甚至不会发出observable1响应。

Observable finalresponse = observable1
                .takeWhile(obsResponse1 ->  checkIfValueExist(obsResponse1))
                .zipWith(observable2,  (observable1, observable2) -> execute(observable1, observable2))
                .flatMap(update -> main.execute(update));

1 个答案:

答案 0 :(得分:0)

在zip中有一条规则,只有当两个流都都发射一个项目时,它才会返回,因此,如果您的对象不是您期望的对象,或者您可以这样做,则您需要过滤或返回observable中的Observable.empty()。使用过滤器

   Observable
            .zip(Observable.just(1).filter(integer -> integer==1), Observable.just(2).filter(integer -> integer==3),(integer, integer2) -> integer)
            .flatMap(update -> foo(update));