Java 8 Map:如果找到匹配,则过滤值并抛出异常

时间:2016-04-26 15:04:53

标签: java lambda java-8

我试图在Map中找到匹配的值,如果找到,我需要抛出IllegalArgumentException。我的代码如下:

final String stringToBeMatched = "someRandomString"; 

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

我在令牌上遇到语法错误" throw"。我不知道我哪里出错了。

3 个答案:

答案 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());