java - 选项和映射操作
问题描述
我有以下情况,我似乎不明白我应该如何正确处理它。
假设以下域结构。我有一个存储联系人对象列表的客户对象。
现在我想做以下事情:
1) 尝试找回所述客户(可选)。
2)如果存在,则使用它来检索联系人对象。
我当时的代码如下所示:
Contact contact = customer.map(cust -> getContacts().stream()
.findFirst()
.orElse(null))
.orElse(null);
请注意,客户对象已被初始化为 Optional。现在我的问题如下:
我想摆脱这些orElse
语句以简化代码,并根据所讨论的对象是否等于另一个对象来简单地返回 true 或 false。到目前为止,我已经尝试过了,我认为它可以完成这项工作。
return customer.map(cust -> getContacts()
.stream()
.findFirst()
.map(custContact -> custContact.map(contact::equals).orElse(false))
.orElse(false);
我的主要问题是,这可以进一步简化吗?我想我在这些映射操作中遗漏了一些东西,但我不太确定。
我的另一个解决方案是这个:
return customer.map(cust -> getContacts()
.stream()
.findFirst()
.map(contact::equals).orElse(false))
.orElse(false);
解决方案
您可以Optional.filter()
使用Stream.anyMatch()
和Optional.isPresent()
:
customer.filter(cust -> getContacts().stream().anyMatch(contact::equals)).isPresent();
推荐阅读
- javascript - 如何只显示时间而不是时间和日期?
- c++ - 模板的内部枚举类不被视为常量表达式?
- json - joi validationerror 'value' 必须是一个数组
- javascript - 执行操作时如何让 javascript 保存输入字段?
- spring-webflux - 反应堆重试:reactor.retry.Retry 与 reactor.util.retry.Retry
- java - thymeleaf 和 maven web 项目无法识别 css 文件
- typescript - Typescript - 引擎如何推断以及如何应用推断背后是否有一致的逻辑?
- android - 添加片段后导航抽屉崩溃
- c# - 如何设置倒计时触发器?
- html - 引导药丸问题