9

我想确定给定的字符串是否匹配 - 忽略大小写 - 中的元素之一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;
}

但这不会编译。

我应该如何对其进行编码以返回是否找到匹配项?

4

3 回答 3

9

使用Stream.anyMatch

public static boolean listContainsTestWord(List<String> list, String search) {
    if (list != null && search != null) {
        return list.stream().anyMatch(search::equalsIgnoreCase);
    }
    return false;
}
于 2015-12-09T08:39:12.123 回答
7

这是一个单行:

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))
于 2015-12-09T08:43:47.050 回答
6

你有一个错误,因为你的findFirst()StreamOptional<String>管道是由String元素组成的。因此,您不能orElse使用boolean参数调用(只有String参数有效)。

解决您的问题的直接方法是使用

findFirst().isPresent();

这样,如果findFirst()返回一个空的可选项,isPresent()将返回false,如果没有,则返回true

但最好使用@Tagir Valeev 的回答并使用anyMatch.

于 2015-12-09T08:41:05.547 回答