java - 我们如何处理 java 流中的异常

标签 java java-8 java-stream

如何使用流转换这个 for 循环。

for (final Foo foo : fooList) {
    if (!FooConstant.FOO_TYPE.equals(foo.getType())) {
        throw new BadRequestException(
          LOGGER,
          FooErrorEnum.NOT_FOO_TYPE.name(),
          String.format("Element %s is not Foo type", foo.getId())
        );
    }
}

我尝试这样做,但 foo.getId()orElseThrow() 中不可用。 注意:BadRequestException 是检查异常。

fooList.stream().filter(foo -> !FooConstant.FOO_TYPE.equals(foo.getType())
    .findFirst()
    .orElseThrow(() -> new BadRequestException(LOGGER, FooErrorEnum.NOT_FOO_TYPE.name(), String.format("Element %s is not Foo type", foo.getId()));

最佳答案

你需要Optional#ifPresent .

fooList.stream().filter(foo -> !FooConstant.FOO_TYPE.equals(foo.getType())
                .findFirst()
                .ifPresent(foo -> {
                     throw new BadRequestException(LOGGER, FooErrorEnum.NOT_FOO_TYPE.name(), String.format("Element %s is not Foo type", foo.getId())
                });

虽然很奇怪。我们通常以相反的方式使用 Optional:过滤掉无效的选项并找到第一个有效的选项。在您的示例中,orElseThrow 将在一切正常时执行,因此不应抛出任何异常。

注意 BadRequestException 必须是 RuntimeException,否则 it won't compile .

关于java - 我们如何处理 java 流中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58235029/

相关文章:

java - 如何优雅地退出java应用程序?

java - 如何在 JPA 对象上使用 Java Stream API?

java - 用于求和 java 8 float 的自定义收集器实现

java - 如何创建特定对象变量的子列表?

java - 找不到支持的密码套件的提供程序错误

java - 在 java 8 中处理 Map<String,List<Object>> 列表

java - 如何从 Java 8 Streams 中的 forEach 循环获取列表输出

java - sun.misc.InvalidJarIndexException : Invalid index when importing from com. * Jython 独立包中

java - 在 Java 中使用 lambda 表达式有什么运行时好处吗?

java - 奇怪的 Java 导入