У меня есть два экземпляра java.util.Optional
, и я хочу получить Optional
, который:
- Имеет значение first Optional, если оно имеет значение.
- Значение второго необязательно, если оно имеет значение.
- Пусто от ни одного параметра не имеет значения.
Есть ли прямой способ сделать это, т.е. уже есть какой-нибудь API для этого?
Следующие выражения сделают это, но я должен упомянуть первый необязательный дважды:
firstOptional.isPresent() ? firstOptional : secondOptional
Это именно то, что делает com.google.common.base.Optional.or()
, но этот метод отсутствует в Java 8 API.
В принятом ответе aioobe перечислены несколько альтернативных подходов для преодоления этого упущения API-интерфейса Optional
, где такое значение должно быть вычислено (что отвечает на мой вопрос). Теперь я решил добавить служебную функцию в свою кодовую базу:
public static <T> Optional<T> or(Optional<T> a, Optional<T> b) {
if (a.isPresent())
return a;
else
return b;
}