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

最优雅的选择词组合方式是什么?

孟增
2023-03-14

到目前为止我得到的是:

Optional<Foo> firstChoice = firstChoice();
Optional<Foo> secondChoice = secondChoice();
return Optional.ofNullable(firstChoice.orElse(secondChoice.orElse(null)));

这让我觉得既可怕又浪费。如果第一个选择存在,我就不必要地计算第二个选择。

还有一个更有效的版本:

Optional<Foo> firstChoice = firstChoice();
if(firstChoice.isPresent()) {
 return firstChoice;
} else {
 return secondChoice();
}

在这里,如果不复制映射器或声明另一个局部变量,我就无法将某个映射函数链接到最后。所有这些都使得代码比正在解决的实际问题更加复杂。

我宁愿这样写:

return firstChoice().alternatively(secondChoice());

然而,可选的::可选的显然不存在。现在怎么办?

共有1个答案

高鸿振
2023-03-14

试试看:

firstChoice().map(Optional::of)
             .orElseGet(this::secondChoice);

map方法为您提供了一个可选的 > 。然后,orelseget方法将其扁平化为可选的 。只有当firstchoice()返回空的可选值时,才会计算secondchoice方法。

 类似资料:
  • 问题内容: 到目前为止,这是我得到的: 这让我既震惊又浪费。如果存在firstChoice,则我将不必要地计算secondChoice。 还有一个更有效的版本: 在这里,如果不复制映射器或声明另一个局部变量,就无法将某些映射函数链接到最后。所有这些使代码比要解决的实际问题更加复杂。 我宁愿这样写: 但是可选:::显然不存在。怎么办? 问题答案: 试试这个: map方法为您提供了一个。然后,该方法将

  • 问题内容: 设和为两个集合。我正在寻找一种 非常 快速或优雅的方法来计算它们之间的设置差异(或,取决于您的偏好)。如标题所示,这两组存储和存储为Javascript数组。 笔记: 壁虎特技可以 我更喜欢本机函数(但是如果速度更快,我可以使用轻量级库) 我看过但未测试JS.Set(请参阅上一点) 编辑: 我注意到有关包含重复元素的集合的评论。当我说“设置”时,我指的是数学定义,这意味着(除其他外)它

  • 问题内容: 最近,我开始开发linux设备驱动程序, 当我想使用内核代码进行调试并在内核文件中添加一些调试消息时,我遇到了一个问题。 例如,最近我加入一些和在驻留在。 然后,我执行以下步骤,这非常耗时。 然后重启并选择我的新内核版本。 我不知道有没有多余的步骤?任何指导或帮助将不胜感激。 问题答案: 这是我有关如何构建和运行定制内核的说明。 获取资源 Linus Torvalds的树是[1]。 在

  • 问题内容: 我有这个AngularJS应用。一切正常。 现在,当满足特定条件时,我需要显示不同的弹出窗口,我想知道什么是最好的处理方式。 目前,我正在评估两个选项,但是我绝对会接受其他选项。 选项1 我可以为弹出窗口创建新的HTML元素,然后直接从控制器附加到DOM。 这将打破MVC设计模式。我对这种解决方案不满意。 选项2 我总是可以在静态HTML文件中插入所有弹出窗口的代码。然后,使用,我可以

  • 我有这个角度JS应用程序。一切都很好。 现在,我需要在特定条件成立时显示不同的弹出窗口,我想知道最好的方法是什么。 目前我正在评估两个选项,但我绝对愿意接受其他选项。 我可以为弹出窗口创建新的超文本标记语言元素,并直接从控制器附加到DOM。 这将打破 MVC 设计模式。我对这个解决方案不满意。 我总是可以在静态超文本标记语言文件中插入所有弹出窗口的代码。然后,使用,我可以只隐藏/显示正确的弹出窗口

  • 问题内容: CSS问题:如果两个不同的选择器应用于一个元素,谁会赢? 我知道这不应该发生,但是我想调整旧应用程序,而CSS居于中间。 问题答案: 规范中的实际上是合理可读的。综上所述: 规则和内联规则获胜。 否则,通常会赢得更具体的胜利。是比更加具体的选择器。 如果规则同样具体,则以最后宣布的为准。 没有特别的理由说明为什么这种“不应该发生”。通常先指定一个广泛适用的规则,然后添加一个更具体的规则