Вот что у меня до сих пор:
Optional<Foo> firstChoice = firstChoice();
Optional<Foo> secondChoice = secondChoice();
return Optional.ofNullable(firstChoice.orElse(secondChoice.orElse(null)));
Это поражает меня как отвратительную, так и расточительную. Если firstChoice присутствует, я ненужно вычисляю secondChoice.
Там также более эффективная версия:
Optional<Foo> firstChoice = firstChoice();
if(firstChoice.isPresent()) {
return firstChoice;
} else {
return secondChoice();
}
Здесь я не могу привязать некоторую функцию сопоставления до конца, не дублируя отображение или не объявляя другую локальную переменную. Все это делает код более сложным, чем реальная проблема.
Я бы скорее написал это:
return firstChoice().alternatively(secondChoice());
Однако Необязательный:: альтернативно, очевидно, не существует. Теперь что?