我有以下情况,我似乎不明白如何正确处理它。
假设以下域结构。我有一个客户对象,它存储联系人对象列表。
现在我要执行以下操作:
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);
答案 0 :(得分:2)
您可以将Optional.filter()
与Stream.anyMatch()
和Optional.isPresent()
结合使用:
customer.filter(cust -> getContacts().stream().anyMatch(contact::equals)).isPresent();