我试图在Map中找到匹配的值,如果找到,我需要抛出IllegalArgumentException。我的代码如下:
final String stringToBeMatched = "someRandomString";
map.values()
.stream()
.filter(a -> stringToBeMatched == a.getField())
.findAny()
.ifPresent(a -> throw new IllegalArgumentException());
我在令牌上遇到语法错误" throw"。我不知道我哪里出错了。
答案 0 :(得分:11)
A lambda body can be an expression or a block of statements。但是,
throw new IllegalArgumentException()
是一个声明,它既不是。用大括号围住它,使它成为一个块。
.ifPresent(a -> {throw new IllegalArgumentException(); } );
对于您的下一个问题,compare your string values with .equals
, not with ==
。
答案 1 :(得分:2)
使用anyMatch
:
boolean found = map.values()
.stream()
.anyMatch(a -> stringToBeMatched.equals(a.getField()));
if(found) {
throw new IllegalArgumentException();
}
答案 2 :(得分:1)
findAny 返回一个Optional,可以使用orElseThrow
map.values()
.stream()
.filter(a -> stringToBeMatched == a.getField())
.findAny()
.orElseThrow(() -> new IllegalArgumentException());