Rxjava使用Zip运算符

时间:2017-09-03 08:43:15

标签: java rx-java

我正在使用zip将2 Observable与以下代码合并

 Observable<boolean> one = someMethod();
 Observable<String> two = someMethod2(),
 Observable.zip(one, two, 

new Func2<boolean, String, newPojo>() {

  @Override
  public MyResult call(boolean ix, 
      String asd) { 
      return myResult;
     }
  }
 )

这项工作完美无缺。但现在我想做,如果

Observable<boolean> one = someMethod();

一次返回true然后只进行两次调用,否则不进行任何两次调用。 我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

使用flatMap

one.flatMap(bool -> {
    if (bool) {
        return two;
    }
    return Observable.empty();
})

答案 1 :(得分:0)

filterflatMap的组合可以做到

one.filter(aBoolean -> aBoolean)
      .flatMap(aBoolean -> two)
      .subscribe(theString -> {});

使用zipWith()

的解决方案
one.filter(aBoolean -> aBoolean)
     .zipWith(two, (aBoolean, s) -> myResult)
     .subscribe(thePojo -> {});

答案 2 :(得分:0)

Zip运算符用于进行并行调用。 您可以使一个函数返回Empty observable而不是false,然后应用switchIfEmpty()来执行Observable。

one
.switchIfEmpty(two)
.subscribe()

Observable<Boolean> one = someMethod(){
//your code
if(condition == true){
return Observable.just(true)
}
else{
return Observable.empty()
}

}