我有一個對象列表,每個對象都有名字和姓氏。我試圖為他們的名字創建一個關鍵字搜索功能,所以我的邏輯是如果我連接他們的名字和姓氏,然后檢查兩個名字的總和是否包含關鍵字,將對象作為字符串返回。我試圖把它寫成一個 lambda 表達式,但我就是不明白。該函數每次都不返回任何內容。我對 lambdas 完全陌生,所以這個簡單的任務對我來說非常困難。當我閱讀下面的代碼時.. 我看到了:每個元素連接它們的名稱,然后通過查看字符串是否包含關鍵字進行過濾,然后將流轉換為列表對象,然后將對象轉換為字符串,然后返回字符串。感謝任何能提供幫助的人。public String generateUserByKeyword2(String keyword){ return users.stream() .map(x-> x.getFirstName() + x.getLastName().toLowerCase()) .filter(x -> x.contains(keyword.toLowerCase())) .collect(Collectors.toList()) .toString();}
1 回答

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
如果您按名字搜索,它不是小寫的,正確的行應該是:
.map(x-> (x.getFirstName() + x.getLastName()).toLowerCase())
(請注意額外的括號,或者您可以通過調用toLowerCase()
兩者來實現相同的效果)
無論如何,結果將返回錯位的串聯名稱。如果要返回原始對象列表,則必須將map
lambda 和filter
lambda 連接在一起:
.filter(x-> (x.getFirstName() + x.getLastName()).toLowerCase().contains(keyword.toLowerCase()) .collect(Collectors.toList())
此外,您可以通過提前調用toLowerCase()
一次來進行一些優化。
添加回答
舉報
0/150
提交
取消