当前位置:  开发笔记 > 编程语言 > 正文

捕获'stream()'或'parallelStream()'中的异常会丢失正确的值

如何解决《捕获'stream()'或'parallelStream()'中的异常会丢失正确的值》经验,为你挑选了1个好方法。



1> Andremoniy..:

为什么不直接包裹lambda-body try...catch

您还可以nullmap以下情况后过滤值:

    intList = strList.stream()// same with "parallelStream()"
            .map(x -> {
                try {
                    return Integer.parseInt(x);
                } catch (NumberFormatException nfe) {
                    System.err.println(nfe.getMessage());
                }
                return null;
            })
            .filter(x -> x!= null)
            .collect(Collectors.toList());

这会给你想要的intList = [1,2,4,6].

编辑:要减少lamdba中try/catch的"沉重感",可以添加辅助方法.

static Integer parseIntOrNull(String s) {
    try {
        return Integer.parseInt(s);
    } catch (NumberFormatException nfe) {
        System.err.println(nfe.getMessage());
    }
    return null;
}

intList = strList.stream()
            .map(x -> parseIntOrNull(x))
            .filter(x -> x!= null)
            .collect(Collectors.toList());

或者为了避免使用null,您可以返回Stream

static Stream parseIntStream(String s) {
    try {
        return Stream.of(Integer.parseInt(s));
    } catch (NumberFormatException nfe) {
        System.err.println(nfe.getMessage());
    }
    return Stream.empty();
}

intList = strList.stream()
            .flatMap(x -> parseIntStream(x))
            .collect(Collectors.toList());


@Andremoniy我为长篇编辑道歉.我开始的时候会更短.
@PeterLawrey我很荣幸能和你有这样的合作答案:)
@PeterLawrey`Option`是避免`null`的另一种选择.
推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有