如果不存在,如何在 Optional 上执行逻辑? [英] How to execute logic on Optional if not present?
本文介绍了如果不存在,如何在 Optional 上执行逻辑?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用 java8 Optional
替换下面的代码:
public Obj getObjectFromDB() {obj obj = dao.find();如果(对象!= null){obj.setAvailable(true);} 别的 {logger.fatal("对象不可用");}返回对象;}
以下伪代码不起作用,因为没有 orElseRun
方法,但无论如何它说明了我的目的:
public 可选getObjectFromDB() {可选的obj = dao.find();返回 obj.ifPresent(obj.setAvailable(true)).orElseRun(logger.fatal("对象不可用"));}
解决方案
使用 Java 9 或更高版本,ifPresentOrElse
很可能是您想要的:
可选<>opt = dao.find();opt.ifPresentOrElse(obj -> obj.setAvailable(true),() ->logger.error("..."));
使用 vavr 或类似方法柯里化可能会得到更简洁的代码,但我还没有尝试过.>
I want to replace the following code using java8 Optional
:
public Obj getObjectFromDB() {
Obj obj = dao.find();
if (obj != null) {
obj.setAvailable(true);
} else {
logger.fatal("Object not available");
}
return obj;
}
The following pseudocode does not work as there is no orElseRun
method, but anyways it illustrates my purpose:
public Optional<Obj> getObjectFromDB() {
Optional<Obj> obj = dao.find();
return obj.ifPresent(obj.setAvailable(true)).orElseRun(logger.fatal("Object not available"));
}
解决方案
With Java 9 or higher, ifPresentOrElse
is most likely what you want:
Optional<> opt = dao.find();
opt.ifPresentOrElse(obj -> obj.setAvailable(true),
() -> logger.error("…"));
Currying using vavr or alike might get even neater code, but I haven't tried yet.
这篇关于如果不存在,如何在 Optional 上执行逻辑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文