我正在尝试在 Map 中查找匹配值,如果找到,我需要抛出 IllegalArgumentException。我的代码如下:
final String stringToBeMatched = "someRandomString";
map.values()
.stream()
.filter(a -> stringToBeMatched == a.getField())
.findAny()
.ifPresent(a -> throw new IllegalArgumentException());
我在标记“throw”上遇到语法错误。我不确定我哪里错了。
lambda 主体可以是表达式或语句块。 然而,
throw new IllegalArgumentException()
是一个陈述,但两者都不是。 用大括号将其包围起来,使其成为一个块。
.ifPresent(a -> {throw new IllegalArgumentException(); } );
对于下一个问题,将字符串值与
.equals
进行比较,而不是与 ==
进行比较。
anyMatch
:
boolean found = map.values()
.stream()
.anyMatch(a -> stringToBeMatched.equals(a.getField()));
if(found) {
throw new IllegalArgumentException();
}
findAny 返回一个Optional,可以使用orElseThrow
map.values()
.stream()
.filter(a -> stringToBeMatched == a.getField())
.findAny()
.orElseThrow(() -> new IllegalArgumentException());
您可以查看并抛出异常:
map.values()
.stream()
.peek(a -> {
if (stringToBeMatched == a.getField()) {
throw new RuntimeException("Expecting field to match: " + stringToBeMatched);
}
});