使用 stream().filter() 在 java 列表上执行不区分大小写的搜索

Performing a case in-sensitive search on a java List using stream().filter()

我正在尝试使用 stream().filter(...) 在 Java 列表上执行不区分大小写的搜索。

我的搜索功能工作正常,但我还没有设法实现它在不区分大小写的情况下工作。我的函数看起来像这样:

public static List<License> searchByEverything(String keyword, String dealerid){
    List<License> licenseDealerList = getLicensesByDealer(dealerid);

   // org.apache.commons.lang3.StringUtils.containsIgnoreCase(keyword);


    Predicate<License> licensePredicate = u -> u.name1.contains(keyword);
    List<License> filteredList = licenseDealerList.stream().filter(licensePredicate).collect(Collectors.toList());

    return filteredList;
}

如您所见,我尝试使用 apache 公共库,但我不知道如何将它包含在我的 stream().filter(...) 中。我研究了一些不同的方法,但并没有真正理解如何将它们中的任何一种实现到我的方法中。在我的例子中,搜索是从对象值的字符串值执行的,并且它 return 是一个对象,这一点非常重要。

我知道我可以使用 matchAny() 之类的东西而不是 filter() 但我不明白如何 return 它作为一个对象。

提前致谢

您可以使用 toLowerCase()

u -> u.name1.toLowerCase().contains(keyword.toLowerCase());

这样两个值的大小写相同,您的搜索不区分大小写。

敏感字符过滤可以使用DFA算法,参考:https://programmer.help/blogs/sensitive-word-filtering-aop-annotation-dfa-algorithm.html