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