【发布时间】:2017-12-15 14:55:11
【问题描述】:
作为一个例子,我有一个这样的可选:
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 是我正在寻找的方法 :)
【问题讨论】:
-
如果
desktop不存在,你希望它保持什么结果?你考虑过.orElse吗? -
您可以尝试
Desktop desktop = Optional.ofNullable(status).map(Status::getDesktop).orElse( defaultValue );,其中defaultValue可以是null或可以分配给desktop的任何其他内容,具体取决于您的需要。 -
ifPresent是执行此操作的干净方法(您只有副作用并且没有使用该值来产生另一个值)。如果您不喜欢 lambda 或方法引用,那么isPresent+get是可能的最简单的程序替代方案,因此不清楚您不喜欢它的什么地方。如果您知道它存在,请不要使用Optional。如果您确定它存在或可以使用NoSuchElementException,如果不存在,请省略isPresent。