选项和映射操作
Optionals and mapping actions
我有以下情况,我似乎不太明白应该如何正确处理。
假设域结构如下。我有一个存储联系人对象列表的客户对象。
现在我想做以下事情:
1) 尝试检索所述客户(可选)。
2) 如果存在,使用它来检索联系人对象。
我的代码目前是这样的:
Contact contact = customer.map(cust -> getContacts().stream()
.findFirst()
.orElse(null))
.orElse(null);
请注意,客户对象已初始化为可选对象。现在我的问题如下:
我想去掉 orElse
语句以简化代码,并根据所讨论的对象是否等于另一个来简单地 return 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()
with Stream.anyMatch()
and Optional.isPresent()
:
customer.filter(cust -> getContacts().stream().anyMatch(contact::equals)).isPresent();
我有以下情况,我似乎不太明白应该如何正确处理。
假设域结构如下。我有一个存储联系人对象列表的客户对象。
现在我想做以下事情:
1) 尝试检索所述客户(可选)。
2) 如果存在,使用它来检索联系人对象。
我的代码目前是这样的:
Contact contact = customer.map(cust -> getContacts().stream()
.findFirst()
.orElse(null))
.orElse(null);
请注意,客户对象已初始化为可选对象。现在我的问题如下:
我想去掉 orElse
语句以简化代码,并根据所讨论的对象是否等于另一个来简单地 return 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()
with Stream.anyMatch()
and Optional.isPresent()
:
customer.filter(cust -> getContacts().stream().anyMatch(contact::equals)).isPresent();