Rx java RxJava如何停止在concatMap中执行后面的观察
我有一个函数evaluate(),它接收任务列表 表示任务的每个整数的简化版本Rx java RxJava如何停止在concatMap中执行后面的观察,rx-java,rx-android,reactivex,concatmap,Rx Java,Rx Android,Reactivex,Concatmap,我有一个函数evaluate(),它接收任务列表 表示任务的每个整数的简化版本 Integer[]tasks=新整数[]{5,3,2,6}; 要求: 我需要按顺序执行每个给定的任务,3不能在5完成之前开始 当执行整个列表时,函数应该通知调用该函数的人 这些执行不能在主UI线程中完成 任务的计算结果可能为false,在这种情况下,提前停止列表,并通知调用此函数的人(与2相同),这不是错误,只是忽略列表中后面的任务 我设法用concatMap完成了需求1,2,3 我需要帮助实现4,concatMa
Integer[]tasks=新整数[]{5,3,2,6};
要求:
private Single evaluateArray(){
Log.i(标记“evaluateArray()”);
整数[]任务=新整数[]{5,3,2,6};
@非Null Single observable=observatable.fromArray(任务)
//并行执行,要实现并行,您需要多个可观察对象。
.concatMap(新函数(){
@凌驾
公共可观察资源应用(整数i)抛出可丢弃{
返回Observable.create(newobservableOnSubscribe(){
@凌驾
public void subscribe(@NonNull observeiemitter-emitter)抛出可丢弃的{
Log.i(标记,i+“开始”);
executeSingle(i).subscribe(新观察者(){
@凌驾
订阅时的公共无效(@NonNull-d){
}
@凌驾
public void onNext(@NonNull Boolean evalStatus){
//我可以在这里获得评估状态,在这里做什么
//如果为false,我应该在这里停止评估,完成整个列表
}
@凌驾
公共无效onError(@NonNull可丢弃e){
}
@凌驾
未完成的公共空间(){
Log.i(标记,i+“完成”);
emitter.onComplete();
}
});
}
}).subscribeOn(Schedulers.newThread());
}
})
//等待,直到所有任务都执行完毕
//请注意,您的所有可观察对象都应发出onComplete事件
//否则你将永远等待
.toList()//返回到1可观察
//可以实现更智能的逻辑。例如,检查一切是否成功
.map(新函数(){
@凌驾
公共字符串应用(列表整数)抛出可丢弃{
返回“”;
}
});
可观测收益;
}
任何调用此函数的人都可以订阅此返回的observable以获取finish事件
如何执行单个任务的简化版本,用于演示,如果给定任务为2,则评估为false并停止执行
public observeable executeSingle(int i){
返回Observable.create(newobservableOnSubscribe(){
@凌驾
public void subscribe(@NonNull observeiemitter-emitter)抛出可丢弃的{
系统时钟睡眠(i*1000);
emitter.onNext(i!=2);//如果为2,则返回false以通知列表
emitter.onComplete();
}
});
}