OptionalのorElseとorElseGetの違い
1375 ワード
先に戻ってきたOptionalクラスに値がある場合:
印刷結果:
戻ってきたOptionalクラスが空の場合:
印刷結果:
Optionalの値が空の場合、orElseでもorElseGetでも実行されることがわかります.返されるOptionalに値がある場合、orElseは実行され、orElseGetは実行されません.
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は実行されません.