我有两个 java.util.Optional
实例,我想得到一个 Optional
要么:
- 具有第一个 Optional 的值,如果它有值。
- 具有第二个 Optional 的值,如果它有值。
- Optional 是空的,没有值。
有没有一种直接的方法可以做到这一点,即是否已经有一些 API 可以做到这一点?
下面的表达式可以做到这一点,但我不得不提到第一个可选的两次:
firstOptional.isPresent() ? firstOptional : secondOptional
这正是 com.google.common.base.Optional.or()
所做的,但该方法不存在于 Java 8 的 API 中。
aioobe 接受的答案列出了一些替代方法来克服 Optional
API 的这种遗漏,其中必须计算这样的值(这回答了我的问题)。我现在选择向我的代码库添加一个实用函数:
public static <T> Optional<T> or(Optional<T> a, Optional<T> b) {
if (a.isPresent())
return a;
else
return b;
}
原文由 Feuermurmel 发布,翻译遵循 CC BY-SA 4.0 许可协议
Java 9 及更高版本:
Java 8 及以下
如果你想避免提及
firstOptional
两次,你可能不得不使用类似的东西或者
但最可读的变体可能是简单地做
如果有人偶然发现这个问题但有一个可选 _列表_,我会建议类似