为了账号安全,请及时绑定邮箱和手机立即绑定

发生错误时如何处理项目?

发生错误时如何处理项目?

慕桂英3389331 2022-10-20 14:58:17
考虑以下代码:    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 继续处理其余的项目?
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

如果尝试用给定值(例如 -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());


查看完整回答
反对 回复 2022-10-20
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

通常,调用层次结构中的上层方法应该以有用的方式处理异常(不仅仅是捕获)。通常这意味着向用户显示有用的错误消息。

对于您的用例,检查字符串是否为数字就足够了:

if (s.matches("-?\\d+")) {
    Integer.parseInt(s)
    }

这是一个基本示例,可能不会涵盖您的所有用例(例如前导零或溢出之类的东西)。


查看完整回答
反对 回复 2022-10-20
  • 2 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信