Java Rx Observable 方法 switchIfEmpty

标签 java rx-java

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/

相关文章:

android - 阵列适配器不更新

java - RxJava 中的 Observable.merge 和 debounce

java - 如何修复仅生成空白文件的文件输出 PrintStream

java - 如何从 pom.xml 配置 Jetty 默认 servlet? (初始化参数 useFileMappedBuffer)

java - 无法使用 jna 从 java 调用 .net 方法?

android - RxJava : catch exception properly

Java8- "effectively final"

java - Android:尝试向我的应用程序添加另一种语言后出现 Inflate 异常

java - 在 Spring roo 应用程序中显示 jasper 报告 HTML 页面(Web 应用程序)

java - 如何处理由 Observable 发出的项目并访问另一个 Observable 的值?