如果找不到元素,如何 return java 流中的默认布尔值?
How to return a default boolean value in java streams if element not found?
我想确定给定的字符串是否匹配 - 忽略大小写 - 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;
}
但是不能编译。
我应该如何将其编码为 return 无论是否找到匹配项?
public static boolean listContainsTestWord(List<String> list, String search) {
if (list != null && search != null) {
return list.stream().anyMatch(search::equalsIgnoreCase);
}
return false;
}
你有一个错误,因为 findFirst()
return 是一个 Optional<String>
,因为你的 Stream 管道由 String
个元素组成。因此,您不能使用 boolean
参数调用 orElse
(只有 String
参数有效)。
您的问题的直接解决方案是使用
findFirst().isPresent();
这样,如果 findFirst()
return 是一个空的可选值,isPresent()
将 return false
如果不是,它将 return true
.
但最好使用@Tagir Valeev 的回答并使用 anyMatch
。
这是一条线:
public static boolean listContainsTestWord(List<String> list, String search) {
return list != null && search != null && list.stream().anyMatch(search::equalsIgnoreCase);
}
连个方法都别想了:
if (list != null && search != null && list.stream().anyMatch("someString"::equalsIgnoreCase))
我想确定给定的字符串是否匹配 - 忽略大小写 - 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;
}
但是不能编译。
我应该如何将其编码为 return 无论是否找到匹配项?
public static boolean listContainsTestWord(List<String> list, String search) {
if (list != null && search != null) {
return list.stream().anyMatch(search::equalsIgnoreCase);
}
return false;
}
你有一个错误,因为 findFirst()
return 是一个 Optional<String>
,因为你的 Stream 管道由 String
个元素组成。因此,您不能使用 boolean
参数调用 orElse
(只有 String
参数有效)。
您的问题的直接解决方案是使用
findFirst().isPresent();
这样,如果 findFirst()
return 是一个空的可选值,isPresent()
将 return false
如果不是,它将 return true
.
但最好使用@Tagir Valeev 的回答并使用 anyMatch
。
这是一条线:
public static boolean listContainsTestWord(List<String> list, String search) {
return list != null && search != null && list.stream().anyMatch(search::equalsIgnoreCase);
}
连个方法都别想了:
if (list != null && search != null && list.stream().anyMatch("someString"::equalsIgnoreCase))