[英]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.