我正在使用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然后只进行两次调用,否则不进行任何两次调用。 我怎么能这样做?
答案 0 :(得分:2)
使用flatMap
:
one.flatMap(bool -> {
if (bool) {
return two;
}
return Observable.empty();
})
答案 1 :(得分:0)
filter
和flatMap
的组合可以做到
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()
}
}