java - 在对象中搜索关键字

标签 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();
}  

最佳答案

如果您按名字搜索,它不是小写的,正确的行应该是:

     .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() 一次来进行优化。

关于java - 在对象中搜索关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54273351/

相关文章:

覆盖 Object 类的 equals 和 toString 方法的 Java 死程序?

发件人时区的javax mail getReceivedDate

asp.net - 获取特定时期内我的所有帖子(lambda 表达式)

java - 在方法的开头使用注入(inject)的 spring bean 和自定义注释做一些事情

java - JFrame 有时根本不出现?

java - Lambda 表达式与方法引用

c# - 为什么 IQueryable 后面跟着 Any 会导致选择没有Where 子句?

java - Stream 在顺序模式下工作,但在并行模式下有问题

javascript - 访问我们传递给另一个对象的函数内的注入(inject)依赖项

java - 如何在android中创建回调链