java - 在流中使用可选

标签 java

我想知道在 Java 8 中使用流时是否有比我通常使用的替代方法来过滤和展开可选。

这里是一些代码片段,在生成一些 markdown 时使用可选作为文件错误处理的一部分,这可能会因 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.map 行,或者重写 .map block 而不需要它们?

最佳答案

使用提供的答案 shmosel 很简洁。然而,对于 Java 8 和 9+ 有许多有趣的答案,参见 "Using Java 8's Optional with Stream::flatMap" .

重写后的代码如下所示:

files.stream()
  .map(f -> {
      try {
          return generateMarkdown(f);
      } catch (IOException e) {
          failed.add(f);
      }
      return null;
  })
  .filter(Objects::nonNull)
  .forEach(h -> { ...

关于java - 在流中使用可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58159991/

相关文章:

java - 与 Hibernate 的只读数据库连接

java - Findbugs、PMD 或 Checkstyle 规则来查找字段的访问权限

java - NullPointerException - Drawable.setBounds - 可能是由于 fragment 转换

java - block 内的类 - 这在哪里有意义?

java - 数组无法隐式转换为可迭代对象

java - ImageIO.read getResource 错误

java - Gwt + Maven + Idea,默认项目生成

java - Spring Security Java 配置

java - Android Webview 的启动屏幕

java - 在 Spring 中动态更改 Bean 引用