En Opcional mientras que el método optional.orElse es llamada, con independencia del elemento está presente o no la parte OrElse se ejecuta no se comporta como la condición else if.
En el siguiente código si se ve en el caso 1 , tanto getNullPoJo y getDefaultPoJo se ejecuta desde getNullPoJo volverá vacía opcional
En el caso 2 , donde obtendrá una opcional con valor de carga (de getLoadedPoJo) también se ejecuta de getDefaultPoJo
Estoy tratando de comprender el funcionamiento de optional.orElse.
public static void main (String [] a) {
PoJo poJo1=getNullPoJo().orElse(getDefaultPoJo());//Case 1
System.out.println("pojo1 Got "+poJo1.getVariable());
PoJo poJo2=getLoadedPoJo().orElse(getDefaultPoJo());//Case 2
System.out.println("pojo2 Got "+poJo2.getVariable());
}
private static Optional<PoJo> getNullPoJo() {
System.out.println("Executing getNullPoJo");
Optional<PoJo> optional=Optional.empty();
return optional;
}
private static Optional<PoJo> getLoadedPoJo() {
System.out.println("Executing getLoadedPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Loaded");
Optional<PoJo> optional=Optional.of(poJo);
return optional;
}
private static PoJo getDefaultPoJo() {
System.out.println("Executing getDefaultPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Default");
return poJo;
}
La salida de corriente es:
La ejecución de getNullPoJo
La ejecución de getDefaultPoJo
pojo1 conseguida por defecto
La ejecución de getLoadedPoJo
La ejecución de getDefaultPoJo
pojo2 Got Cargado
Mi salida esperada es:
La ejecución de getNullPoJo
La ejecución de getDefaultPoJo
pojo1 conseguida por defecto
La ejecución de getLoadedPoJo
pojo2 Got Cargado
No quiero que la llamada a getDefaultPoJo en Caso 2
Uso orElseGet()
para evitar la evaluación getDefaultPoJo()
cuando el Optional
no está vacío:
PoJo poJo1=getNullPoJo().orElseGet(() -> getDefaultPoJo());
PoJo poJo2=getLoadedPoJo().orElseGet(() -> getDefaultPoJo());