繁体   English   中英

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

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

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

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

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 commons 库,但我不知道如何将其包含在我的stream().filter(...)中。 我研究了一些不同的方法,但并不真正了解如何将它们中的任何一个实施到我的方法中。 在我的情况下,从对象值上的字符串值执行搜索并返回一个对象非常重要。

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

提前致谢

您可以使用toLowerCase()

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

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

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

要使用 Appache Commons 的StringUtils.containsIgnoreCase(str, searchStr) ,请执行以下操作:

List<License> filteredList = licenseDealerList.stream()
                                .filter(u -> StringUtils.containsIgnoreCase(u.name1, keyword)) // Don't forget the import statement for StringUtils.
                                .collect(Collectors.toList());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM