gpt4 book ai didi

java - 从一个 Optional 或另一个中获取值(value)

转载 作者:IT老高 更新时间:2023-10-28 20:38:24 33 4
gpt4 key购买 nike

我有两个 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;
}

最佳答案

Java 9 及以上版本:

firstOptional.or(() -> secondOptional);

Java 8 及以下

如果您想避免两次提及 firstOptional,您可能不得不使用类似

firstOptional.map(Optional::of).orElse(secondOptional);

Optional.ofNullable(firstOptional.orElse(secondOptional.orElse(null)));

但最易读的变体可能是简单地做

Optional<...> opt = firstOptional.isPresent()  ? firstOptional
: secondOptional.isPresent() ? secondOptional
: Optional.empty();

如果有人偶然发现这个问题,但有一个 list 选项,我会建议类似

Optional<...> opt = optionals.stream()
.filter(Optional::isPresent)
.findFirst()
.orElse(Optional.empty());

关于java - 从一个 Optional 或另一个中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599996/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com