Optional的orElse和orElseGet区别
作者:互联网
原文链接:https://my.oschina.net/u/3660989/blog/1810260
先试下返回的Optional类有值的情况:
public static void main(String[] args) {
List<Integer> 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<Integer> 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
可以发现,当Optonal的值是空值时,无论orElse还是orElseGet都会执行;
而当返回的Optional有值时,orElse会执行,而orElseGet不会执行。
来源于:
https://my.oschina.net/u/3660989/blog/1810260
标签:orElseGet,get,int,reduce,System,Optional,orElse,out 来源: https://blog.csdn.net/weixin_41888813/article/details/99674773