mem*_*und 7 java string ignore-case optional java-stream
我想确定一个给定的字符串是否匹配 - 忽略大小写 - 一个元素中的一个List<String>.
我正在尝试使用Java 8流来实现这一点.这是我的尝试使用.orElse(false):
public static boolean listContainsTestWord(List<String> list, String search) {
if (list != null && search != null) {
return list.stream().filter(value -> value.equalsIgnoreCase(search))
.findFirst().orElse(false);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但那不会编译.
如何编码以返回是否找到匹配?
public static boolean listContainsTestWord(List<String> list, String search) {
if (list != null && search != null) {
return list.stream().anyMatch(search::equalsIgnoreCase);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
您有一个错误,因为您的 Stream 管道由元素组成,因此findFirst()返回一个。因此,您不能使用参数进行调用(只有参数有效)。Optional<String>StringorElsebooleanString
您的问题的直接解决方案是使用
findFirst().isPresent();
Run Code Online (Sandbox Code Playgroud)
这样,如果findFirst()返回一个空的可选,isPresent()将返回false,如果没有,它将返回true。
但最好采用@Tagir Valeev 的回答并使用anyMatch.
这是单线的:
public static boolean listContainsTestWord(List<String> list, String search) {
return list != null && search != null && list.stream().anyMatch(search::equalsIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)
甚至不用理会方法:
if (list != null && search != null && list.stream().anyMatch("someString"::equalsIgnoreCase))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5946 次 |
| 最近记录: |