Java Rx Observable方法switchIfEmpty

时间:2016-03-01 10:24:53

标签: java rx-java

RxJava Lib 方法 switchIfEmpty 里面的指令总是被执行。 如果observable是空的,那么将重新评估,并且将返回源或替代。 是否有一种方法允许只传递一个observable供应商,只有当源observable为空时才会执行该供应商?

作为一个java可选是

之间的相同区别
  • 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);

}

谢谢

1 个答案:

答案 0 :(得分:1)

  

有一种方法允许只传递一个observable供应商,只有在源observable为空时才会执行该供应商?

可以将for(Object element : sourceArrayList) { targetArrayList.add(element); } 视为供应商:它将在以后生成您的值(即:您订阅时)

即使在您调用Observable方法时调用switchIfEmptygetNumber作为Observable的参数只会在您switchIfEmpty时发出到你的subscribe

因此,本质上,只有当源observable为空时才会执行此observable

Observable