RxJava在条件上断开链

RxJava在条件上断开链,java,android,conditional,rx-java,rx-android,Java,Android,Conditional,Rx Java,Rx Android,我正在创建一个可观察的序列,我基本上是在寻找一种很好的方法,在不满足条件的情况下打破链条。理想情况下,我们可以在这种情况下通过一个错误。这基本上是删除flatmap操作符中的if/else语句。这是我现在的情况 flatMap(new Func1<User, Observable<Response>>() { @Override public Observable<Response>

我正在创建一个可观察的序列,我基本上是在寻找一种很好的方法,在不满足条件的情况下打破链条。理想情况下,我们可以在这种情况下通过一个错误。这基本上是删除flatmap操作符中的if/else语句。这是我现在的情况

flatMap(new Func1<User, Observable<Response>>() {
                    @Override
                    public Observable<Response> call(Result result) {
                        if(isValid(result))) {
                            return api.getObservableResponse(); //some retrofit observable
                        } else {
                            observer.onError();
                            return null; //??? I guess this would force an error
                        }
                    }
                })
flatMap(新函数1(){
@凌驾
公共可观察呼叫(结果){
如果(isValid(result))){
返回api.getObserverResponse();//可以观察到一些改进
}否则{
observer.onError();
返回null;/??我想这会导致错误
}
}
})

我见过filter()和所有其他条件运算符,但我不确定它们是否符合我的要求。有更好的方法吗?还是我的东西看起来不错?谢谢

如何使用
takeWhile
-

可观察到的任何东西=。。。
可观察到的不符合条件=无论什么
.takeWhile(this::isValid)//根据isValid的来源进行修改
.flatMap(r->api.getobserveResponse());//仅在有效之前执行此操作

返回可观察的。错误(异常)
?@我猜这会导致错误。我正在寻找某种方法,如果存在的话,我可以加入其中来完全删除if/else。为什么不在应用flatMap之前过滤你的条件?@johnowus我可以,尽管我觉得那样会添加比我现在更多的代码。如果这种情况自动发生,最好抛出一个错误。如果我理解正确的话。如果为false,过滤器将停止流?或者它会停止go-to-onError吗?
返回Observable.empty()
Observable<T> whatever = ...

Observable<T> untilConditionMet = whatever
   .takeWhile(this::isValid) // modify according wherever isValid comes from
   .flatMap(r -> api.getObservableResponse()); // only doing this until isValid