RxJava2:仅当所有可观察对象发出错误时才发出错误

RxJava2:仅当所有可观察对象发出错误时才发出错误,java,rx-java2,reactivex,Java,Rx Java2,Reactivex,我有多个观察对象在做网络调用,我需要从combiner observable发出错误,只有当所有观察对象发出错误时。如果至少有一个可观察对象完成,则应传递结果 我当前的流功能如下: Observable.fromIterable(list) .flatMap{networkObservable} .reduce{combine result of all network observables to same list} 我可以这样做: Observable.fromIterable(list

我有多个观察对象在做网络调用,我需要从combiner observable发出错误,只有当所有观察对象发出错误时。如果至少有一个可观察对象完成,则应传递结果

我当前的流功能如下:

Observable.fromIterable(list)
.flatMap{networkObservable}
.reduce{combine result of all network observables to same list}
我可以这样做:

Observable.fromIterable(list)
.flatMap{networkObservable.onErrorReturnItem(errorItem)}
.reduce{check if all items are error items and return error item otherwise combine result of 
all network observables to same list}

但是我想知道是否有更好的方法来处理这个问题。

如果我理解正确,如果任何
网络可观察的
中至少有一个项目,错误应该被忽略,对吗?在这种情况下,您可以检测发出的
onNext
s,然后在错误处理程序中抑制错误:

Observable.using(
()->新的原子布尔(),
hasItem->Observable.fromIterable(列表)
.flatMap(v->networkObservable,true)//延迟错误
.doOnNext(v->{
如果(!hasItem.get()){
hasItem.set(true);
}
})
.onErrorResumeNext(错误->{
if(hasItem.get()){
return-Observable.empty();
}
返回可观测误差(error);
}),
()->{}//无需清理原子逻辑
)

谢谢你的回答。这个解决方案看起来确实应该有效,但我尽量避免在我的流中使用.doOnNext运算符。同样,在第一次查看时,与带有错误项的reduce运算符相比,很难理解它。我会继续寻找更好的方法来处理这个案子。