En Java 8, quiero hacer algo a un Optionalobjeto si está presente, y hacer otra cosa si no está presente.
if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
Sin embargo, este no es un 'estilo funcional'.
Optionaltiene un ifPresent()método, pero no puedo encadenar un orElse()método.
Por lo tanto, no puedo escribir:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
En respuesta a @assylias, no creo que Optional.map()funcione para el siguiente 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;
});
En este caso, cuando optestá presente, actualizo su propiedad y la guardo en la base de datos. Cuando no está disponible, creo uno nuevo objy lo guardo en la base de datos.
Nota en las dos lambdas tengo que volver null.
Pero cuando optestá presente, ambas lambdas se ejecutarán. objse actualizará y se guardará un nuevo objeto en la base de datos. Esto se debe return nulla la primera lambda. Y orElseGet()continuará ejecutándose.
return null;con return o;(ambos). Sin embargo, tengo la fuerte sensación de que estás trabajando en el lugar equivocado. Deberías trabajar en el sitio que produjo eso Optional. En ese lugar debe haber una forma de realizar la operación deseada sin el intermedio Optional.
ifPresentesto contradice esto. Todos los demás métodos se refieren al valor y no a las acciones.