如果找不到元素,如何 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 无论是否找到匹配项?

使用Stream.anyMatch:

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))