orElseのJavaのオプションの作業は、他にいるかのようではありません

キショールチャンドラン:

オプションでoptional.orElseメソッドが呼び出している間、関係なく、要素のorElse部分は、それがあれば、他の条件のように動作しませんが実行されて存在していますか。

コードの下であなたが見ている場合ケース1 getNullPoJoが空のオプションを返しますので、getNullPoJoとgetDefaultPoJoの両方が実行されます

ケース2あなたがgetDefaultPoJoが実行されても(getLoadedPoJoから)ロードされた値とオプションを取得します

私はちょうど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;
}

電流出力は次のようになります。

getNullPoJoを実行

getDefaultPoJoを実行

pojo1ガットデフォルト

getLoadedPoJoを実行

getDefaultPoJoを実行

pojo2ガットがロード

私の予想される出力は次のようになります。

getNullPoJoを実行

getDefaultPoJoを実行

pojo1ガットデフォルト

getLoadedPoJoを実行

pojo2ガットがロード

私は中getDefaultPoJoへの呼び出しをしたくないケース2

彼らは次のとおりでした:

使用orElseGet()評価を避けるためにgetDefaultPoJo()する場合Optional、空ではありません。

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=225995&siteId=1