Java 8 Map:筛选值,如果找到匹配项,则抛出异常

2022-09-03 04:42:40

我试图在Map中找到一个匹配的值,如果找到,我需要抛出一个非法的论据。我的代码如下:

final String stringToBeMatched = "someRandomString"; 

map.values()
   .stream()
   .filter(a -> stringToBeMatched == a.getField())
   .findAny()
   .ifPresent(a -> throw new IllegalArgumentException());

我在令牌“throw”上遇到语法错误。我不确定我哪里出错了。


答案 1

lambda 主体可以是表达式或语句块。然而

throw new IllegalArgumentException()

是一个语句,两者都不是。用大括号包围它,使它成为一个块。

.ifPresent(a -> {throw new IllegalArgumentException(); } );

对于下一个问题,请将字符串值与 .equals 进行比较,而不是与 == 进行比较


答案 2

替代清洁剂解决方案,使用任意匹配项

boolean found = map.values()
                   .stream()
                   .anyMatch(a -> stringToBeMatched.equals(a.getField()));
if(found) {
   throw new IllegalArgumentException();
}

推荐