我有一个对象列表,每个对象都有名字和姓氏。我试图为它们的两个名称创建关键字搜索功能,所以我的逻辑是如果我将它们的名字和姓氏连接起来,然后检查两个名称的总和是否包含关键字,则以字符串形式返回对象。我正在尝试将其编写为lambda表达式,但我只是没有得到它。该函数每次均不返回任何内容。我对lambda完全陌生,因此对我而言,这项简单的任务相当困难。当我阅读下面的代码时,我看到以下内容:每个元素将它们的名称连接起来,然后通过查看字符串是否包含关键字进行过滤,然后将流转换为列表对象,然后将对象转换为字符串,然后返回字符串。感谢任何可以提供帮助的人。
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();
}
答案 0 :(得分:1)
如果您按名字搜索,则不是小写,正确的行应为:
.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()
来进行优化。