簡體   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