我有以下案例,我似乎不明白我應該如何正確處理它。假設以下域結構。我有一個存儲聯系人對象列表的客戶對象?,F在我想做以下事情: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);
1 回答

蝴蝶刀刀
TA貢獻1801條經驗 獲得超8個贊
您可以Optional.filter()
使用Stream.anyMatch()
和Optional.isPresent()
:
customer.filter(cust -> getContacts().stream().anyMatch(contact::equals)).isPresent();
添加回答
舉報
0/150
提交
取消