考虑以下代码:
Collection<String> foos = Arrays.asList("1", "2", "3", "X", "5", "6", "7", "8", "9", "10");
Flowable<Integer> integerFlowable = Flowable.fromIterable(foos).map(s -> Integer.parseInt(s)).onErrorReturnItem(-1);
PublishProcessor<Integer> processor = PublishProcessor.create();
processor.map(i -> 2 * i).subscribe(i -> System.out.println(i), e -> System.out.println("error!"));
integerFlowable.subscribe(processor);
到达“ X”时,处理结束。
如何指示RxJava进行其余项目?
答案 0 :(得分:1)
通常,调用层次结构中的上层方法应以有用的方式处理Exception(而不仅仅是捕获)。通常,这意味着向用户显示有用的错误消息。
对于您的用例,也许足以检查字符串是否为数字:
if (s.matches("-?\\d+")) {
Integer.parseInt(s)
}
这是一个基本示例,可能无法涵盖您的所有用例(例如,前导零或类似溢出的内容)。
答案 1 :(得分:1)
如果尝试用给定值(例如-1)替换所有“无效”输入,则可以提供其他映射器函数。
Flowable<Integer> integerFlowable = Flowable.fromIterable(foos)
.map(s -> {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return -1;
}
});
您还可以在创建Flowable之前删除所有“无效”输入。
Collection<String> foos = Arrays.asList("1", "2", "3", "X", "5", "6", "7", "8", "9", "10");
Collection<String> numbers = foos.stream().filter(s -> {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}).collect(Collectors.toList());