У меня есть следующий случай, который я, кажется, не понимаю, как я должен справиться с этим правильно.
Предположим, следующая доменная структура. У меня есть объект customer, в котором хранится список объектов контактов.
Теперь я хочу сделать следующее:
1) Попытка получить указанного клиента (необязательно).
2) Если он существует, используйте его для извлечения контактного объекта.
Мой код на данный момент выглядит так:
Contact contact = customer.map(cust -> getContacts().stream()
.findFirst()
.orElse(null))
.orElse(null);
Обратите внимание, что объект customer был инициализирован как необязательный. Теперь мой вопрос следующий:
Я хотел бы избавиться от операторов 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);