从一个可选或另一个可选中获取价值

2023-12-26

我有两个java.util.Optional实例,我想得到一个Optional要么:

  • 具有第一个可选值(如果它有值)。
  • 具有第二个可选值(如果它有值)。
  • 为空,Optional 都没有值。

有没有一种直接的方法可以做到这一点,即是否已经有一些 API 可以做到这一点?

下面的表达式可以做到这一点,但我必须提到第一个可选两次:

firstOptional.isPresent() ? firstOptional : secondOptional

这正是com.google.common.base.Optional.or()确实如此,但 Java 8 的 API 中不存在该方法。


接受的答案aioobe列出了一些替代方法来克服这一遗漏OptionalAPI就在必须计算这样的值的地方(这回答了我的问题)。我现在选择向我的代码库添加一个实用函数:

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);

or

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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从一个可选或另一个可选中获取价值 的相关文章

  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • 如何在Mac上使用eclipse安装jetty

    我是一个新手 jetty 和 RESTful API 我想使用 Jetty 创建 REST 服务 并希望将嵌入式 jetty 与 eclipse 一起使用 任何人都可以建议我在 Mac OS 中使用 Eclipse 安装 Jetty Jet
  • Maven 目标的默认阶段?

    据我了解 在 Maven 中 插件目标可以附加到生命周期阶段 如果没有定义 默认阶段是什么 根据我的经验 这取决于插件的目标 例如 组装 单个 http maven apache org plugins maven assembly plu
  • 此版本不符合 Google Play 64 位要求,添加库后仍然出现错误

    我正在 Play 商店上传一个视频编辑器应用程序 其中包含带有一些本机代码的库 所以我通过将其添加到 gradle 来使其兼容 64 位 ndk abiFilters armeabi v7a arm64 v8a x86 x86 64 添加了
  • Codility 钉板

    尝试了解 Codility NailingPlanks 的解决方案 问题链接 https app codility com programmers lessons 14 binary search algorithm nailing pla
  • 无法在 Mac OS X 上启动应用程序 我收到错误 LSOpenURLsWithRole() 应用程序失败,错误为 -10810

    问题 我正在尝试启动一个应用程序 遗传网络分析仪 http www genostar com category products gna 但它默默地失败了 使用时open gna app产生以下错误消息 LSOpenURLsWithRole
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • Scala(或 Java)中泛型函数的特化

    是否可以在 Scala 中专门化泛型函数 或类 例如 我想编写一个将数据写入 ByteBuffer 的通用函数 def writeData T buffer ByteBuffer data T buffer put data 但由于 put
  • Java 中 static 关键字如何工作?

    我正在阅读Java教程 http docs oracle com javase tutorial index html从一开始我就有一个问题static字段或变量上的关键字 作为Java said here http docs oracle
  • Java 类:匿名类、嵌套类、私有类

    有人能解释一下Java中匿名类 嵌套类和私有类之间的区别吗 我想知道与每个相关的运行时成本以及每个编译器的方法 这样我就可以掌握哪个最适合用于例如性能 编译器优化的潜力 内存使用以及其他 Java 编码人员的普遍可接受性 我所说的匿名类是指
  • Netty中连接关闭后重新连接的最佳方法是什么

    简单场景 扩展 SimpleChannelUpstreamHandler 的较低级别的类 A 此类是发送消息和接收响应的主力 系统其他部分可以使用顶级类 B 来发送和接收消息 可以模拟同步和异步 此类创建 ClientBootstrap 设
  • 如何列出所有可用的 LookAndFeel 主题?

    如何列出所有可用的 LookAndFeel 主题 我想在 JComboBox 中显示以供用户选择 这真的很简单 public static UIManager LookAndFeelInfo getInstalledLookAndFeels
  • 在 netBeans 中运行程序时,字体看起来非常奇怪

    我在我的新 MacBook M1 上设置了 netBeans 和 SceneBuilder 除了运行程序时的字体外 一切正常 它看起来像这样 我不知道为什么 按钮应显示 Click me 标签应显示 Hello 我收到的错误消息是 M rz
  • 如何使用 Hibernate Session.doWork(...) 进行保存点/嵌套事务?

    我正在使用 JavaEE JPA 托管事务与 Oracle DB 和 Hibernate 并且需要实现某种嵌套事务 据我所知 此类事情不受开箱即用的支持 但我应该能够为此目的使用保存点 正如建议的https stackoverflow co
  • 使用 Cucumber Scenario Outline 处理 Excel 电子表格

    如果可能的话 我试图找到一种更优雅的方法来处理从与 Excel 电子表格行 第 n 个 相关的 Cucumber Scenario Outline 中调用第 n 个数字 目前 我正在使用迭代编号来定义要从中提取数据的 Excel 电子表格的
  • 设计抽象类时是否应该考虑序列化问题?

    一般来说这个问题来自Eclipse建议在抽象类上添加串行版本UID 由于该类是抽象类 因此该类的实例永远不会存在 因此它们永远不会被序列化 只有派生类才会被序列化 所以我的问题是放置一个安全 SuppressWarnings serial
  • 如何使用maven创建基于spring的可执行jar?

    我有一个基于 Maven 的 Spring WS 客户端项目 我想将其打包为单个 jar 在eclipse中 一切运行正常 当我尝试将其打包为可执行 jar 时 我收到 ClassNotFound 异常 因为 Spring jar 未包含在
  • JPA - 非主键字段上的 @OneToOne 关系不起作用

    我有一个 Spring Data JPA 后端 使用 Hibernate 作为 ORM 实现 这是模型 Person MailConfig id PK uid PK FK Person uid uid Entity
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa

随机推荐

  • 从 Mac 上的 SWT 应用程序打开 LWJGL 窗口

    我有一个 SWT 应用程序 可以在按下按钮后打开 OpenGL 窗口 使用 LWJGL 库 它应该关闭它的主 SWT 窗口并打开一个带有 OpenGL 上下文的新窗口 在 Windows 上运行良好 在 Mac 上 我收到此错误 2010
  • Azure 托管和 MVC5 报告

    我正在使用 Visual Studio 2013 开发托管在 Azure 上的 MVC5 EF6 Web 应用程序 我刚刚完成需要创建报告的开发部分 我试图使用 Microsoft ReportViewer 来实现此目的 尽管它在本地工作得
  • Haskell:有条件地中断循环

    我想在这样的情况下打破循环 import Data Maybe fromJust isJust Maybe Just tryCombination Int gt Int gt Maybe String tryCombination x y
  • LaTeX 相当于 Google Chart API

    我目前正在寻找不同的解决方案 将二维数学公式放入网页中 我认为维基百科解决方案 从 LaTeX 源代码生成 png 图像 已经足够好了 直到我们在网络浏览器中获得对 MathML 的支持 我突然意识到也许可以创建一个谷歌图表 API htt
  • 配置next.config文件

    我正在使用 Next js 并想添加反应语义用户界面 https react semantic ui com 使用他们的登录组件之一 在前端我收到此错误 编译失败 node modules semantic ui css semantic
  • R (dplyr):查找行特定范围内的所有行

    我有一个数据集 其中每一行都由住院 ID 标识 每行包含有关住院 ID 发生医院 ID 以及给定住院的入院日期和出院日期的信息 我想知道 对于每次住院治疗 在该次住院开始前 30 天内在指定医院结束的所有其他住院治疗的 ID 以下是 2 家
  • 在Delphi中是否可以将接口绑定到未实现它的对象

    我知道 Delphi XE2 有新的 TVirtualInterface 用于在运行时创建接口的实现 不幸的是我没有使用 XE2 我想知道在旧版本的 Delphi 中做这种事情涉及什么样的黑客行为 假设我有以下界面 IMyInterface
  • AVCaptureSession 没有提供良好的照片质量和良好的分辨率

    我正在与AVCaptureSession用于捕获图像 它工作正常 但没有给出好的解决方案 我将其与iPhone相机拍摄的图像进行了比较 发现iPhone相机拍摄的图像比iPhone相机拍摄的图像要好得多AVCaptureSession im
  • 无法跨子域读取cookie(owa_cookie)

    在我的生产环境中 我的前端位于 a example com 后端位于 b example com 我正在使用 javascript 在 example com 域的路径 中创建一个 cookie 以便从任何子域读取它 当我尝试使用 owa
  • Dart 中包含异步函数的测试函数

    我想测试一个调用其他异步函数的函数 但我不知道如何编写它 函数会像这样 function X x Y y x doSomethingAsync then result if result null y doSomething 我想模拟 X
  • XmlReader持续读取

    我有一个非常大的 xml 文件 这是 xml 格式的简化版本
  • Python Windows 路径正则表达式

    我花了两个小时来解决这个问题 我有这个字符串 C Users Bob luxshop jeans diesel qd images Livier 11 png 我有兴趣获得 Livier 11 png但这对我来说似乎不可能 我怎样才能做到这
  • 客户端证书始终为空

    我已经安装了一个证书Personal也受信任的根证书颁发机构 已尝试使用这段代码发布到端点 public void Post try var clientCert LoadFromStore MyThumbprint var request
  • PHP 在单独的驱动器上上传/读取文件

    我需要能够在单独的驱动器上上传 查看文件 现在 我的网站位于 C 驱动器上的 htdocs 文件夹中 我们已在 D 驱动器上分配了空间来上传和查看文件 使用下面的代码 我可以使用 scandir 来查看 htdocs 文件夹中的内容 但我需
  • html 标签属性“data-setbg”在 React 项目中不起作用

    我正在转换 HTML网站模板 https colorlib com wp template leramiz 进入一个React项目 在该模板中有一个名为data setbg的属性 但没有提供标准的html属性 我想知道什么样的库或框架提供这
  • 触摸事件不起作用?在 UImageview 中?

    我在 viewcontroller m 的 viewdidload 中完成了以下操作 img UIImageView alloc initWithFrame CGRectMake 0 0 320 480 img multipleTouchE
  • 从 Swift 命令行程序使用 NSURLSession

    我正在尝试测试一些概念验证命令行应用程序 然后将其集成到更大的应用程序中 我想做的是使用 NSURLSession 下载一些数据这个例子 https medium com swift programming learn nsurlsessi
  • 如何识别 Type 是否是自定义结构体?

    For a Type 有一个属性IsClass 但如何知道Type是一个结构体 抱歉 我必须添加更多信息 我正在使用 C 虽然IsValueType是必要条件 这显然还不够 对于 Integer 来说 它也是一种值类型 t IsValueT
  • 选择更改时,获取数据属性值

    以下代码返回 未定义 select change function alert this data id
  • 从一个可选或另一个可选中获取价值

    我有两个java util Optional实例 我想得到一个Optional要么 具有第一个可选值 如果它有值 具有第二个可选值 如果它有值 为空 Optional 都没有值 有没有一种直接的方法可以做到这一点 即是否已经有一些 API