我有一个简单的场景,我试图在不笨拙且不编写不可读的多行 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";
}
}
我想要的是以下选项:
- 如果抛出异常,则整个流失败
- 如果发生异常,则跳过该值并继续处理流的其余部分
我知道处理此问题的流行方法,例如在自定义FunctionalInterface中抛出RuntimeException或仅内联处理异常。
但是有什么方法,我可以扩展 Streams 并只编写像 StreamWithExceptionHandling 扩展 Stream 这样的流。它也接受 ExceptionHandler 并只实现上述行为?
感谢您花时间阅读本文。
最佳答案
尝试编写示例解决方案并将其发布到代码审查。您的问题可能很适合。
Lambda 对于单衬很有用。对于其余的:不要因为仅仅定义一个类或一个方法而感到难过。
对于选项 2,将值映射到包含操作状态和返回值的结果对象,然后按状态进行过滤。您将避免向流 API 引入非标准行为。
关于java - 在传递给 Java 8 Streams 的映射函数中实现检查异常处理的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58950919/