在对象中搜索关键字

时间:2019-01-20 03:28:16

标签: java lambda

我有一个对象列表,每个对象都有名字和姓氏。我试图为它们的两个名称创建关键字搜索功能,所以我的逻辑是如果我将它们的名字和姓氏连接起来,然后检查两个名称的总和是否包含关键字,则以字符串形式返回对象。我正在尝试将其编写为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();
}  

1 个答案:

答案 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()来进行优化。