Java 8的Optional.ifPresent和if not Present的函数样式?

在Java8中,我想对一个可选的对象(如果它存在)做一些事情,如果它不存在,我想做另一件事情

if(opt.isPresent()){
System.out.println(“找到”);
}否则{
System.out.println(“未找到”);
}

不过,这不是一种“功能性风格”

Optional有一个ifPresent()方法,但我无法链接orElse()方法

因此,我不能写:

opt.ifPresent(x->System.out.println(“found”+x))
.orElse(System.out.println(“未找到”);

作为对@assylias的回复,我认为Optional.map()不适用于以下情况:

opt.map(o-&gt{
System.out.println(“opt存在时…”);
o、 setProperty(xxx);
更新(o);
返回null;
}).orElseGet(()-&gt{
System.out.println(“创建新对象”);
dao.save(新obj);
返回null;
});

在这种情况下,当出现opt时,我更新其属性并保存到数据库中。当它不可用时,我创建一个新的obj,并保存到数据库中

注意,在两个lambda中,我必须返回null

但是当存在opt时,两个lambda都将被执行obj将被更新,新对象将保存到数据库中。这是因为在第一个lambda中返回null。而orElseGet()将继续执行

如果您使用的是Java 9+,则可以使用ifpresentorese()方法:

opt.ifpresentorese(
值->系统输出打印项次("找到:"+value),
()->系统输出打印项次("未找到")
);

发表评论