我的场景是这样的:在流中,如果在元素处理过程中发生错误(在本例中元素为“3”),我仍然希望继续处理其他元素。
在这个例子中:我想打印"1,2,4,5“,但是它只是打印"1 ,2”。
Observable<String> numbers = Observable.just("1", "2", "three", "4", "5");
numbers.map(v->{
return Integer.parseInt(v);
}).onErrorResumeNext(error->{return Observable.just(-1);})
.filter(v-> {
System.out.println("filter value smaller than 0");
return v>0;
})
.subscribe(s -> {
System.out.println(s);
});
}
我检查了doc,"onErrorResumeNext“将相反地将控制权让给从resumeFunction返回的可观察到的。
有没有办法打印"1,2,4,5"?
发布于 2022-06-12 10:41:24
由于map
中出现崩溃,流停止了。避免流停止的唯一方法是在您的示例中不让map
崩溃。将parseInt
放入尝试捕获并从catch部分返回-1。
Observable<String> numbers = Observable.just("1", "2", "three", "4", "5");
numbers.map(v -> {
try {
return Integer.parseInt(v);
} catch (NumberFormatException ex) { // <--------------------------------------
return -1;
}
})
.filter(v -> {
System.out.println("filter value smaller than 0");
return v > 0;
})
.subscribe(s -> {
System.out.println(s);
});
https://stackoverflow.com/questions/72579880
复制相似问题