No Java 8, quero fazer algo com um Optionalobjeto, 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.
Optionaltem 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 optpresente, atualizo sua propriedade e salvo no banco de dados. Quando não está disponível, eu crio um novo obje salvo no banco de dados.
Nota nas duas lambdas eu tenho que voltar null.
Mas quando optestiver presente, as duas lambdas serão executadas. objserá atualizado e um novo objeto será salvo no banco de dados. Isso ocorre por causa do return nullprimeiro 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.
ifPresentisso contradiz. Todos os outros métodos se referem ao valor e não às ações.