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

可选获取值(如果存在)

林俊英
2023-03-14

作为一个例子,我有这样一个可选选项:

Optional<Desktop> opt = Optional.ofNullable(status).map(Status::getDesktop);

我想拥有桌面并在lambda表达式之外使用它。我这样做:

if (opt.isPresent()){
    Desktop desktop = opt.get();
    ...
}

有没有更好的解决方案来获得桌面;像这样的?

Desktop desktop = Optional.ofNullable(status).map(Status::getDesktop).ifPresent(get());

编辑:OrElse是我在寻找的方法:)

共有2个答案

刘和正
2023-03-14

就在上周,我在这里被告知,像这样使用可选选项都是一种代码味道,所以

Desktop desktop = (status != null)? status.getDesktop() : null;
鲁炳
2023-03-14

如果您的桌面有一个默认值,您可以尝试使用可选选项。orElse

Desktop defaultDesktop = ...;

Desktop desktop = Optional.ofNullable(status)
    .map(Status::getDesktop)
    .orElse(defaultDesktop);

但是,您不必在带有可选项的lambda表达式中工作。如果存在。您完全可以使用一个方法来接收桌面实例,它将充当可选的消费者参数。如果存在

Desktop desktop = Optional.ofNullable(status)
    .map(Status::getDesktop)
    .ifPresent(this::workWithDesktop);

然后:

void workWithDesktop(Desktop desktop) {
    // do whatever you need to do with your desktop
}

如果您需要其他参数(除了桌面本身),您可以使用调用该方法的lambda表达式:

String arg1 = "hello";
int arg2 = 10;

Desktop desktop = Optional.ofNullable(status)
    .map(Status::getDesktop)
    .ifPresent(desktop -> this.workWithDesktop(desktop, arg1, arg2));

然后:

void workWithDesktop(Desktop desktop, String arg1, int arg2) {
    // do whatever you need to do with your desktop, arg1 and arg2
}
 类似资料:
  • 问题内容: 我有一个这样的类结构: 我的目标是调用get方法,然后检查它是否存在。如果存在,则返回该属性;如果不存在,则仅返回null。所以像这样: 当然,这不是正确的Java 8可选语法,但这就是我的“伪代码”。用Java 1行有什么办法实现这一点? 问题答案: 您正在描述的是方法: 如果值不存在,则可让您使用函数在内转换该值,如果不存在该值,则返回一个空值(可选)。 还要注意,您可以从映射函数

  • 我有以下Java 8代码: 它工作正常,但我想知道如何将调用链接到不使用。我试过使用,但它不允许返回另一个

  • 所以我有这样的代码: 我只需要Javascript来获取当前选中的任何复选框的值。 编辑:要添加,只有一个复选框。

  • 问题内容: 所以我得到的代码看起来像这样: 我只需要Javascript来获取当前选中的任何复选框的值。 编辑 :要添加,将只有一个复选框。 问题答案: 对于现代浏览器 : 通过使用: 没有_以下内容的 _纯javascript :

  • 我到处寻找,并尽一切努力从SQLQueriesRadion按钮获取选定的mySQL值。 这是我的密码 谢啦

  • 问题内容: 我有一个带有属性的元素。如何使用JavaScript获取此元素的选定值? 这是我正在尝试的: 问题答案: 没有jQuery: 快速示例: