检查选项是否相等的便捷方法

2024-04-01

我正在寻找一种更方便的方法来证明可选值的相等性。

这就是一个Oracle 博客文章 http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html建议:

Optional<USB> maybeUSB = ...;
maybeUSB.filter(usb -> "3.0".equals(usb.getVersion())
                    .ifPresent(() -> System.out.println("ok"));

恕我直言,结果是这样的

if (maybeUSB.filter(c -> "3.0".equals(c.getVersion())).isPresent()) {
   ...
}

当然,这是一个糟糕的例子,因为它比较的是版本而不是 USB 本身的实例,但我认为它仍然应该证明我的观点。

这真的是最好的吗?

No

boolean presentAndEquals(Object)

or

boolean deepEquals(Object)

我在这里错过了什么吗?

EDIT:

我对Optionals.equals 也不太满意。 我真的必须先装箱一个对象才能立即拆箱并检查是否相等吗?

EDIT II:

非常满意:

optional
    .filter(nonOptional::equals)
    .isPresent()

如今。

经过几年的函数式编程,if失去一个lot的相关性。


你有很多选择。

已经注意到:

boolean isEqual = maybeFoo.equals(Optional.of(testFoo));

或者:

boolean isEqual = maybeFoo.isPresent() && maybeFoo.get().equals(testFoo);

Or:

boolean isEqual = testFoo.equals(maybeFoo.orElse(null));

最后两个确实有稍微不同的语义:每个返回不同的值maybeFoo是空的并且testFoo一片空白。目前尚不清楚哪个是正确的响应(我猜这是没有标准 API 方法可以执行此操作的原因之一)。

如果您阅读了以下内容,您可能会想到其他的OptionalAPI 文档并应用一些想法。文档中没有什么魔法是不存在的。

更一般地说,如果你经常碰到这个问题,以至于它让你感到困扰,那么你可能正在接近Optional错误的哲学。

照我看来,Optional是要承认某些东西不会总是存在,并且您需要(有时是冗长的)代码来处理它。

这应该是例外。只要有可能,尝试创建变量can't为空或Optional.empty().

在这种情况不可避免的情况下,请接受您需要额外代码的事实。

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

检查选项是否相等的便捷方法 的相关文章

随机推荐

  • Go-复制结构之间的所有公共字段

    我有一个存储 JSON 的数据库 以及一个提供外部 API 的服务器 通过 HTTP post 可以更改该数据库中的值 该数据库由不同的进程在内部使用 因此具有通用的命名方案 客户看到的密钥不同 但与数据库中的密钥进行 1 1 映射 存在未
  • 使用 Parse 创建 Stripe 客户

    我正在尝试使用解析创建一个条带客户 但似乎无法从响应中获取 customer id 值 var newCustomer Stripe Customers create card request params cardToken email
  • Objective-c:访问方法中的可变参数[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Objective C 中创建可变参数方法 https stackoverflow com questions 4804674 how to create variable argument
  • 紧凑的等于和哈希码

    我有一个有 4 个属性的 bean user institutionId groupId postingDate 我使用 Eclipse 生成 equals 和 hashcode 但生成的代码不太漂亮 有没有一种紧凑的方法可以做到同样的事情
  • 将ELF文件加载到内存中

    我正在尝试将 elf 文件放入内存然后执行它 步骤如下 1 要放入内存的文件 int main printf Hello world n return 0 2 编译它gcc o hello hello c static ELF Header
  • 如何锁定 Django 中的关键部分?

    我找不到一个好的干净方法来锁定 Django 中的关键部分 我可以使用锁或信号量 但 python 实现仅适用于线程 因此如果生产服务器分叉 那么这些将不会受到尊重 有谁知道一种方法 我现在正在考虑 posix 信号量 来保证跨进程的锁定
  • Docker Weave 和 WeaveDNS 问题

    我在本地计算机上运行的小型 weave 网络上设置 weaveDNS 时遇到问题 目前 问题表现为以下事实 当我运行 weave status 时 我在输出中没有看到 DNS 部分 如故障排除部分中所建议的那样 http docs weav
  • 如何正确使用倒计时线程,如何提前停止它?

    线程没有按我期望的方式工作 我有一个可行的解决方案 可以使用 Raspberry Pi 和簧片开关监控冰箱何时打开和关闭 声音播放未暂停和暂停 我现在想添加一个计时器 以便在门打开时间过长时执行某些操作 我认为启动一个在警报操作之前休眠 x
  • 排列 R 中向量的所有唯一枚举

    我试图找到一个函数来排列所有unique向量的排列 而不计算相同元素类型子集中的并置 例如 dat lt c 1 0 3 4 1 0 0 3 0 4 has factorial 10 gt 3628800 可能的排列 但仅10 2 2 4
  • R 中的“=”和“<-”有什么区别? [复制]

    这个问题在这里已经有答案了 我正在使用 R 2 8 1 并且可以同时使用 and lt 作为变量赋值运算符 他们之间有什么区别 我应该使用哪一个 From here http stat ethz ch R manual R patched
  • html 仅选择一组中的一个复选框

    那么如何才能只允许用户选择一个复选框呢 我知道单选按钮是 理想的 但就我的目的而言 它不是 我有一个字段 用户需要选择两个选项之一 但不能同时选择两个选项 问题是我需要我的用户也能够取消选择他们的选项 这就是单选按钮失败的地方 因为一旦选择
  • 使用.NET删除矩形?

    我可以删除我绘制的旧矩形并绘制新矩形吗 private void panel1 MouseClick object sender MouseEventArgs e Graphics g this panel1 CreateGraphics
  • 使用 Visual Studio 2008 远程调试 Web 应用程序的服务器端

    因此 我读到在我的测试服务器计算机上安装 VS2008 不是一个好主意 因为它对运行时环境的改变太大 我以前从未尝试过使用 Visual Studio 进行远程调试 那么对服务器端 Web 应用程序代码进行逐行远程调试的 最佳 方法是什么
  • Turbolinks 不工作 - 而是加载页面两次

    所以 在我的 Rails 4 应用程序中 我有 Turbolinks gem require jquery js require jquery turbolinks require turbolinks 然而 似乎有些不对劲 Turboli
  • 为什么我必须显式链接 libm? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么必须链接C 中的数学库 https stackoverflow com questions 1033898 why do you have to link the math library in
  • java进程停止整个进程树

    我正在使用 Java 运行时运行命令 包括某些 CVS 命令 I use process runtime exec cmd C cvs 在 Java 中运行 Process 的格式我需要有停止它的选择 为此 我使用 Java Process
  • 如何在模板中使用 request.META.get('HTTP_REFERER') ?

    我想用request META get HTTP REFERER 在模板内 我的模板来源 extends base html block title django bookmark login endblock block head log
  • 如何将 Google Apps 脚本 blob 转换为 base64 编码的字符串?

    我在 Google Apps 脚本中有一个 blob 如何将其转换为 Base64 编码的字符串以便将其写入其他 API FileReader 似乎不起作用 你可以试试这个 Utilities base64Encode blob getBy
  • 以编程方式执行 Segue 并将参数传递到目标视图

    在我的应用程序中 我有一个以编程方式执行转场的按钮 void myButtonMethod execute segue programmatically self performSegueWithIdentifier MySegue sen
  • 检查选项是否相等的便捷方法

    我正在寻找一种更方便的方法来证明可选值的相等性 这就是一个Oracle 博客文章 http www oracle com technetwork articles java java8 optional 2175753 html建议 Opt