Fio*_*t86 4 java filter optional java-8 java-stream
以下老式的简单代码工作正常(遍历字符串列表,并返回 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;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想做同样的事情,但改用 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);
}
Run Code Online (Sandbox Code Playgroud)
使用第二种方法,我收到以下错误:
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;
}
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这个错误,我应该怎么做才能解决它?
Optional.get()是只有当你知道有没有实际值使用。如果没有价值,它会抛出 NSEE,正如您所发现的。
看起来你想要.findFirst().isPresent(),或者如下所述,anyMatch(predicate).