gpt4 book ai didi

Java Rx Observable 方法 switchIfEmpty

转载 作者:行者123 更新时间:2023-11-30 10:48:39 24 4
gpt4 key购买 nike

RxJava 库方法switchIfEmpty里面的指令,总是被执行。然后将评估可观察对象是否为空,并将返回源或替代项。是否有一种方法只允许传递一个仅在源可观察对象为空时才会执行的可观察对象供应商?

作为java的Optional也是一样的区别

  • Optional.orElse()
  • Optional.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);

}

我的解决方案

      //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);

}

谢谢

最佳答案

There is a method that allows to pass just a supplier of observable that will be execute only if the source observable is empty?

Observable可以看作是供应商:它将在稍后生成您的值(即:当您订阅时)

即使 switchIfEmpty在您调用 getNumber 时被调用方法,Observable作为 switchIfEmpty 的参数给出只会在你 subscribe 时发出给你的Observable

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

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 !"
}

关于Java Rx Observable 方法 switchIfEmpty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35720357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com