OptionalのorElseとorElseGetの違い

1375 ワード

先に戻ってきたOptionalクラスに値がある場合:
public static void main(String[] args) {
        List list =  Arrays.asList(10,20,30);
        //  reduce      Optional 
        int a =  list.stream().reduce(Integer::sum).orElse(get("a"));
        int b =  list.stream().reduce(Integer::sum).orElseGet(() -> get("b"));
        System.out.println("a  "+a);
        System.out.println("b  "+b);
    }
    public static int get(String name){
        System.out.println(name+"     ");
        return 1;
    }
   

印刷結果:
  a     

  a  :60

  b  :60

戻ってきたOptionalクラスが空の場合:
public static void main(String[] args) {
        List list =  Arrays.asList();
        //  reduce      Optional 
        int a =  list.stream().reduce(Integer::sum).orElse(get("a"));
        int b =  list.stream().reduce(Integer::sum).orElseGet(() -> get("b"));
        System.out.println("a  "+a);
        System.out.println("b  "+b);
    }
    public static int get(String name){
        System.out.println(name+"     ");
        return 1;
    }
   

印刷結果:
a     

b     

a  :1

b  :1

Optionalの値が空の場合、orElseでもorElseGetでも実行されることがわかります.返されるOptionalに値がある場合、orElseは実行され、orElseGetは実行されません.