在Java 8中,如果Optional
对象存在,我想对它做一些事情,如果它不存在,我想对它做另一件事情。
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
不过,这不是一种“功能性风格”。
Optional
有一个ifPresent()
方法,但我无法链接一个orElse()
方法。
因此,我不能写:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
回复@assylias,我不认为Optional.map()
适用于以下情况:
opt.map( o -> {
System.out.println("while opt is present...");
o.setProperty(xxx);
dao.update(o);
return null;
}).orElseGet( () -> {
System.out.println("create new obj");
dao.save(new obj);
return null;
});
在这种情况下,当opt
存在时,我更新它的属性并保存到数据库。当它不可用时,我创建一个新的obj
并保存到数据库。
注意,在这两个lambda中,我必须返回null
。
但是当opt
存在时,两个lambdas都将被执行。obj
将被更新,并且一个新对象将被保存到数据库中。这是因为第一个lambda中的return null
。并且orElseGet()
将继续执行。