java - 在传递给 Java 8 Streams 的映射函数中实现检查异常处理的更好方法是什么

标签 java exception stream java-stream

我有一个简单的场景,我试图在不笨拙且不编写不可读的多行 lambda 的情况下进行编码。

public class StreamTest {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("hellow", "world");
        Stream<String> stream = list.stream().map(StreamTest::exceptionThrowingMappingFunction);

    }

    public static String exceptionThrowingMappingFunction(String s) throws Exception {
        if (s.equals("world")) {
            throw new Exception("world is doomed");
        }
        return s + " exists";
    }
}

我想要的是以下选项:

  1. 如果抛出异常,则整个流失败
  2. 如果发生异常,则跳过该值并继续处理流的其余部分

我知道处理此问题的流行方法,例如在自定义FunctionalInterface中抛出RuntimeException或仅内联处理异常。

但是有什么方法,我可以扩展 Streams 并只编写像 StreamWithExceptionHandling 扩展 Stream 这样的流。它也接受 ExceptionHandler 并只实现上述行为?

感谢您花时间阅读本文。

最佳答案

尝试编写示例解决方案并将其发布到代码审查。您的问题可能很适合。

Lambda 对于单衬很有用。对于其余的:不要因为仅仅定义一个类或一个方法而感到难过。

对于选项 2,将值映射到包含操作状态和返回值的结果对象,然后按状态进行过滤。您将避免向流 API 引入非标准行为。

关于java - 在传递给 Java 8 Streams 的映射函数中实现检查异常处理的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58950919/

相关文章:

java - jackson :将json的一些字段映射到类的内部字段

java - 如何设置 AWS SAM 本地 Lambda 函数的 ARN?

java - Android Studio - 无法捕获异常锁定表面

delphi - 如何将 BLOB 流中的任意图像加载到 TImage 中?

c++ - 标准流打印无关字符

java - Java 中客户搜索的 Radix(Trie) 树实现

java - 单个项目中的 Spring Hibernate 和 JDBC 模板

C++/CX - DataReader 越界异常

c# - 从 FaultException<> 获取真正的异常

javascript - 创建目录的读取流并将整个目录通过管道传输到 MongoDB Bucket