No Java 8, quero fazer algo com um Optional
objeto, se estiver presente, e fazer outra coisa, se não estiver presente.
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
Este não é um 'estilo funcional', no entanto.
Optional
tem um ifPresent()
método, mas não consigo encadear um orElse()
método.
Assim, não posso escrever:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
Em resposta a @assylias, acho que não Optional.map()
funciona para o seguinte caso:
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;
});
Nesse caso, quando opt
presente, atualizo sua propriedade e salvo no banco de dados. Quando não está disponível, eu crio um novo obj
e salvo no banco de dados.
Nota nas duas lambdas eu tenho que voltar null
.
Mas quando opt
estiver presente, as duas lambdas serão executadas. obj
será atualizado e um novo objeto será salvo no banco de dados. Isso ocorre por causa do return null
primeiro lambda. E orElseGet()
continuará a executar.
return null;
por return o;
(ambos). No entanto, tenho a forte sensação de que você está trabalhando no lugar errado. Você deve trabalhar no site que produziu isso Optional
. Nesse local, deve haver uma maneira de realizar a operação desejada sem o intermediário Optional
.
ifPresent
isso contradiz. Todos os outros métodos se referem ao valor e não às ações.