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