作为一个例子,我有一个像这样的可选项:
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是我正在寻找的方法:)
答案 0 :(得分:5)
上周我在这里被告知,甚至使用像这样的可选代码气味,所以
Desktop desktop = (status != null)? status.getDesktop() : null;
答案 1 :(得分:2)
如果您的Desktop
有默认值,则可以尝试使用Optional.orElse
:
Desktop defaultDesktop = ...;
Desktop desktop = Optional.ofNullable(status)
.map(Status::getDesktop)
.orElse(defaultDesktop);
但是,您不必在Optional.ifPresent
的lambda表达式中工作。您可以完美地使用接收Desktop
实例的方法,该实例将充当Consumer
的{{1}}参数:
Optional.ifPresent
然后:
Desktop desktop = Optional.ofNullable(status)
.map(Status::getDesktop)
.ifPresent(this::workWithDesktop);
如果您需要其他参数(除了桌面本身),您可以使用调用该方法的lambda表达式:
void workWithDesktop(Desktop desktop) {
// do whatever you need to do with your desktop
}
然后:
String arg1 = "hello";
int arg2 = 10;
Desktop desktop = Optional.ofNullable(status)
.map(Status::getDesktop)
.ifPresent(desktop -> this.workWithDesktop(desktop, arg1, arg2));