java - Java -> Stream.filter() 如何让它返回一个字符串
问题描述
所以我有这个任务,我需要使用 lambda 表达式来进行过滤搜索。简而言之,我有一个用户数据库,我需要为用户进行的每次搜索打印一条消息。我所做的是:
text=users.stream()
.filter(c -> c.getName().equals(filter.getName()))
.findFirst()
.map( c -> {
Final String message= c.getSearchOutput(filter.getTitle();
return message;
})
.toString();
问题是我的文字类似于
“可选:[在此处插入最终字符串消息]”
我需要公正
在此处插入最终字符串消息....
如何改进这个 lambda 表达式?我需要这样做,因为我必须将文本解析为 JSON 对象,而我显然无法在 lambda 表达式的主体中执行此操作。
解决方案
findFirst
返回一个Optional
所以你可以尝试使用:
Optional.orElse / orElseGet / orElseThrow
方法:
text = users.stream()
.filter(c -> c.getName().equals(filter.getName()))
.findFirst().map( c -> {
return c.getSearchOutput(filter.getTitle();
}).orElse("");
Optional.get
方法:
text = users.stream()
.filter(c -> c.getName().equals(filter.getName()))
.findFirst().map( c -> {
return c.getSearchOutput(filter.getTitle();
}).get();
Optional.get
如果您的可选选项为空,则会抛出NoSuchElementException
,因此您可能想要使用第一个选项。
推荐阅读
- java - 如何在 Microsoft Azure 部署的 Web 服务中获取源 IP
- mongodb - mongo查询:基于另一个字段添加一个具有排名号的新字段
- jquery - JQuery foreach 不带
- android - 如何使键盘快捷键在 Android Studio 3 的分离窗口中工作?
- vulkan - 本地设备内存和专用内存有什么区别?
- nlp - 如何训练机器人对未知用户短语的意图?
- java - 将 Json 映射到嵌套 POJO
- parsing - 使用递归下降解析器验证“break”语句
- javascript - 如何在 TypeScript 中定义由事件处理程序名称和事件处理程序组成的类型
- ios - UICollectionview 动态高度问题