java - 在 Streams 中使用 Optional
问题描述
我想知道在 Java 8 中使用流时是否有比我通常使用的过滤和解包 Optional 的替代方法。
这是一些代码片段,它在产生一些降价时使用 Optional 作为文件错误处理的一部分,这可能会因 IO 异常而失败,我正在处理失败列表。
files.stream()
.map(f -> {
try {
return Optional.of(generateMarkdown(f));
} catch (IOException e) {
failed.add(f);
}
return Optional.<Markdown>empty();
})
.filter(o -> o.isPresent())
.map(o -> o.get())
.forEach(h -> { ...
有没有更好的方法来编写.filter
and.map
行,或者重写 .map 块不需要它们?
解决方案
使用 shmosel提供的答案 很简洁。但是,在 “将 Java 8 的 Optional 与 Stream::flatMap 一起使用”中讨论了 Java 8 和 9+ 的许多有趣答案。
重写后的代码如下所示:
files.stream()
.map(f -> {
try {
return generateMarkdown(f);
} catch (IOException e) {
failed.add(f);
}
return null;
})
.filter(Objects::nonNull)
.forEach(h -> { ...
推荐阅读
- c# - 如何反序列化 json 列表?
- java - Eclipse 项目构建无法为 jre/lib/jrt-fs.jar 初始化 ct.sym
- spring-cloud-task - 使用 DeployerPartitionHandler 动态更改 maxWorkers
- java - 引起:java.net.ConnectException:连接被拒绝:连接
- angular - 如何等待订阅完成 Angular 5?
- php - 每次点击加载更多产品
- jira - Jira 中的 JQL 查询搜索
- azure - 我们不同办公室的内部 DNS 设置,但我正在考虑使用 Azure 私有 DNS 服务器是否有意义
- react-native - 在 React Native 中导入 yaml 文件导致数字 1 而不是实际内容
- tensorflow - Raspberrypi W 中的 PiCamera mmal 错误为零