如何使用流转换这个 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/