Java Rx可观察方法switchIfEmpty

Java Rx可观察方法switchIfEmpty,java,rx-java,Java,Rx Java,RxJava库 方法switchIfEmpty 里面的指令总是被执行的。 然后,如果可观测值为空或不为空,则将进行evalutate,并返回源或替代项。 是否有一种方法只允许传递一个可观测的供应商,而只有当源可观测为空时,该供应商才会被执行 作为一个java选项,两者之间的区别是相同的 可选。orElse() 可选。orElseGet() //从缓存中获取数字 private Observable<Integer> getNFromCache(){ return Observa

RxJava库 方法switchIfEmpty 里面的指令总是被执行的。 然后,如果可观测值为空或不为空,则将进行evalutate,并返回源或替代项。 是否有一种方法只允许传递一个可观测的供应商,而只有当源可观测为空时,该供应商才会被执行

作为一个java选项,两者之间的区别是相同的

  • 可选。orElse()
  • 可选。orElseGet()
//从缓存中获取数字

private Observable<Integer> getNFromCache(){

return Observable.empty;
    }


public Observable<Integer> getNumber(){

        return getNFromCache(scope)
        .switchIfEmpty(this::doHttpRequest);

    }


private Observable<Integer> doHttoRequest(){

    return Observable.of(1);

 }
private Observable getNFromCache(){
返回可见。空;
}
公共可观测getNumber(){
返回getNFromCache(作用域)
.switchIfEmpty(this::doHttpRequest);
}
私有可观测doHttoRequest(){
第(1)项的可观测收益;
}
我的解决方案

      //try to get number from cache  
public Observable<Integer> getNFromCache(){ 
    return Observable.empty;
}


private Observable<Integer> getNumber(){

 Observable<Integer> result= getNFromCache(scope);
 return !result.isEmpty().blocking().first()?result:
 result.switchIfEmpty(this::doHttpRequest);

            }


public Observable<Integer> doHttoRequest(){

   return Observable.of(1);

}
//尝试从缓存中获取数字
公共可观察的getNFromCache(){
返回可见。空;
}
私有可观测getNumber(){
可观察结果=getNFromCache(范围);
return!result.isEmpty().blocking().first()?结果:
switchIfEmpty(this::doHttpRequest);
}
公共可观测doHttoRequest(){
第(1)项的可观测收益;
}
多谢各位

有一种方法只允许传递一个可观测的供应商,只有当源可观测为空时才会执行

可观察到的
可被视为供应商:它将在以后生成您的值(即:您订阅时)

即使在调用
getNumber
方法时调用了
switchIfEmpty
,作为
switchIfEmpty
参数的
observatable
也只会在
订阅
您的
observatable
时发出

因此,从本质上讲,只有当源可观察对象为空时,才会执行此可观察对象

private Observable<Integer> getNFromCache(){
    return Observable.empty;
}


public Observable<Integer> getNumber(){
      return getNFromCache(scope)
              .switchIfEmpty(this::doHttpRequest);
}


private Observable<Integer> doHttpRequest(){
    return Observable.of(1)
                     .doOnSubscribe(() -> System.out.pritnln("START !"))
}

public static void main(String...args) {
   getNumber(); // display nothing => values are not emitted !
   getNumber().subscribe(); // display "START !"
}
private Observable getNFromCache(){
返回可见。空;
}
公共可观测getNumber(){
返回getNFromCache(作用域)
.switchIfEmpty(this::doHttpRequest);
}
私有可观察doHttpRequest(){
第(1)项的可观测收益
.doOnSubscribe(()->System.out.pritnln(“开始!”)
}
公共静态void main(字符串…参数){
getNumber();//不显示=>不会发出值!
getNumber().subscribe();//显示“开始!”
}

我想用另一个发出真实值的可观察对象替换(1)
中的placeholding
Observable.of,而不仅仅是打印,因为我无法在
doOnSubscribe
中返回任何内容,我该怎么做?