Mi IDE (InteliJ) me mantiene señalando que mi código "se puede reemplazar con una sola expresión en estilo funcional", destacando el isPresent()
:
return timestamp.isPresent() ? new Obj2(timestamp.get()) : null;
timestamp
se inicializa como un opcional:
Optional<Date> timestamp = ...
Mi suposición es que debo utilizar ifPresent
. como este timestamp.ifPresent(Obj2::new)
. Pero ifPresent
es nula y no tengo oportunidad de devolver el objeto creado. También Cant luego regresar null
. ¿Hay una solución a mi código?
Estás en lo correcto al decir ifPresent
vuelve nula y por lo tanto no es adecuado en este caso. El IDE es lo que sugiere que sólo tiene que hacer:
timestamp.map(Obj2::new).orElse(null);
Esto lee como "si el opcional timestamp
tiene un estado presente a continuación, pasar el objeto que contiene en el Obj2
constructor y devuelve esta nueva Obj2
instancia de otro modo ( orElse
de retorno) null
.
En otra nota, IntelliJ IDEA puede ayudarle a generar el código que está sugiriendo.
por ejemplo, dado el siguiente captura de pantalla:
Simplemente hecho clic en la parte de "destacado" y pulsar la tecla "ALT + ENTER", y sugiere IntelliJ si debe sustituir a la condición con un estilo funcional.