使用 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
我正在尝试使用 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