java - 在对象中搜索关键字
问题描述
我有一个对象列表,每个对象都有名字和姓氏。我试图为他们的名字创建一个关键字搜索功能,所以我的逻辑是如果我连接他们的名字和姓氏,然后检查两个名字的总和是否包含关键字,将对象作为字符串返回。我试图把它写成一个 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();
}
解决方案
如果您按名字搜索,它不是小写的,正确的行应该是:
.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()
一次来进行一些优化。
推荐阅读
- tensorflow2.0 - 如何在从 Yolov4 转换为 TensorFlow Lite 模型的 yolov4-416 自定义模型中查找 mAP 和 f1 分数
- javascript - Jquery 通过单击按钮刷新并删除“隐藏”属性
- c# - URL路由Visual Studio C#的最佳方式
- c# - 如何将文件上传到网络上的不同端口?
- python - 使用正则表达式在python中查找不同的链接结构
- node.js - 带有等待的猫鼬查询返回未定义
- python - 使用python ev3进行多线程,连接方法不起作用
- docker - Powershell:使用docker时从错误流重定向输出的问题
- python - (Discord.py) 使用 on_guild_join 事件为 dm 消息添加延迟
- c - 如何查找和替换 C 字符串中的多个或所有出现