Java opcional de trabajo de OrElse no es como si lo demás

Kishore Chandran:

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

Eran :

Uso orElseGet()para evitar la evaluación getDefaultPoJo()cuando el Optionalno está vacío:

PoJo poJo1=getNullPoJo().orElseGet(() -> getDefaultPoJo());
PoJo poJo2=getLoadedPoJo().orElseGet(() -> getDefaultPoJo());

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=225999&siteId=1
Recomendado
Clasificación