java - 在列表中查找匹配项时出现 NoSuchElementException

标签 java filter java-8 java-stream option-type

以下老式的简单代码工作正常(遍历字符串列表,并返回 true,因为应该有匹配):

public boolean isMatched() {
  List<String> stringList = Arrays.asList("str1", "str2", "str3");
  String matchString = "str1";

  for (String str : stringList) {
    if (StringUtils.equals(str, matchString)) {
        return true;
    }
  }

  return false;
}

现在,我想做同样的事情,但改用 Java 8。到目前为止我有这个:

public boolean isMatched() {
  List<String> stringList = Arrays.asList("str1", "str2", "str3");
  String matchString = "str1";
  return (stringList.stream().filter(str -> StringUtils.equals(matchString, str)).findFirst().get() != null);
}

使用第二种方法,我收到以下错误:

java.util.NoSuchElementException: No value present [junit] at java.util.Optional.get(Optional.java:135)

为什么会出现此错误,我应该如何解决?

最佳答案

Optional.get() 在您知道那里有实际值时使用。如果没有值(value),它会抛出 NSEE,如您所见。

看起来您想要 .findFirst().isPresent(),或者如下所述,anyMatch(predicate)

关于java - 在列表中查找匹配项时出现 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36346409/

相关文章:

Java反射将一个方法作为另一个方法的参数传递?

java - Log4j 可加性

java - 我是否可以实例化 Journal Article 对象并在没有构造函数的情况下设置每个属性?

regex - SPARQL:组合和排除正则表达式过滤器

java - 如何使用 java.security 禁用密码套件

java-8 - Iterable<Map<String,Object>> 类型中的 forEach(Consumer<? super Map<String,Object>>) 方法不适用于参数 ((<no type> k

java - 字符串在阿拉伯语中显示为单独的字母

java - 使用 static final unmodifiable Set as constant 来检查变量值

struts2 - 两个Struts过滤器之间的区别?

Javascript:查找值在 JSON 中出现的次数