当前位置: 首页 > 知识库问答 >
问题:

如何在没有if条件的情况下使用Java可选添加不同的逻辑

锺威
2023-03-14

我想对如下可选值应用不同的逻辑

Optional<String> alarm = getAlarm();
if (alarm.isPresent()) {
    testAutoStopAndRollback(alarm.get());
} else {
    testWithoutAutoStopAndRollback();
}

有没有更简洁的方法来实现相同的逻辑?我知道我可以将一半逻辑移到ifPresent()

alarm.ifPresent(name -> testAutoStopAndRollback(name));

剩下的部分我怎么做?

为了澄清这个问题,我的代码是坚持使用Java8,因此我将无法在Java9中使用ifPresentorese。

共有2个答案

宇文迪
2023-03-14

一种方法可以通过返回一些值从testAutoStopAndRollbacktestWithouse tAutoStopAndRollback,例如,我会返回布尔值来识别值是否存在

testAutoStopAndRollback(val) ---> returns true
testWithoutAutoStopAndRollback ---> returns false

然后使用可选

boolean value = alarm.map(this::testAutoStopAndRollback).orElseGet(this::testWithoutAutoStopAndRollback);
拓拔骁
2023-03-14

我觉得你的第一个例子已经很好了。除非您可以升级到Java9,否则可选不包含像ifPresentOrElse这样的方法。只要坚持编程的第一条规则:“如果它有效,不要碰它!”:)

如果您想创建更多的类来稍微整理一下代码,请查看这个问题。

 类似资料:
  • 本文向大家介绍如何在没有ON条件的情况下使用MySQL JOIN?,包括了如何在没有ON条件的情况下使用MySQL JOIN?的使用技巧和注意事项,需要的朋友参考一下 我们可以不加条件地使用“交叉连接”。交叉联接以笛卡尔积形式给出结果。例如,如果一个表中有3条记录,而另一个表中有2条记录,则第一个记录将与所有第二个表记录匹配。然后,将重复相同的过程以进行第二次记录,依此类推。 交叉连接的例子 创建

  • 我需要为密码字段设置一个错误,条件是“只允许2到22个字符和符号,\-” 但是我有点困在这里了。 这是我到目前为止得到的: 但问题是,如果我输入了_或-以外的符号,错误消息仍然不会显示。对于输入长度,错误消息显示为它应该显示的样子。

  • 我在文本7中使用pdfHTMl创建了文档。我想为没有第一页的每一页添加页眉。我使用了PdfDocument事件。END_PAGE事件。但它适用于有第一页的每一页。如何从第一页中删除页眉?谢谢。

  • 我正在上一门Java课程,我们还没有正式学习if语句。我在学习,看到了这个问题:

  • 问题内容: 我正在使用构建Web POST参数的方法,但是有一些值仅在它们不存在的情况下才想添加。 效果很好,但是如果我将变量设为可选,如何防止将其添加到参数中?像这样的东西(伪代码): 我希望这已经足够清楚了,有人知道如何解决吗? 问题答案: 创建初始字母后,您必须单独添加密钥: Python没有语法将键定义为条件键;如果您已经按顺序拥有所有内容,则可以使用dict理解: 但这不是很可读。 另一

  • 问题内容: 我正在尝试附加在没有日志文件的SQL Server Management Studio中。 我得到下面的错误。任何想法如何做到这一点? 执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo) 无法打开物理文件“ C:\ sql_logs \ YAFnet_log.ldf”。 操作系统错误2:“ 2(系统找不到指定的