> 运动
javaoptioaloelse(oelse与o区别)
在生活中,很多人可能想了解和弄清楚Java Optional中orElse()和orElseGet()的区别的相关问题?那么关于java optional orelse的答案我来给大家详细解答下。
这两个方法表示当Optional对象里面的值为空的时候,返回一个默认的值。这个方法极其相似,甚至在很多情况下可以相互替代,但是仍旧有一些不同。
1. 传入参数不同
public T orElse(T other)public T orElseGet(Supplier<? extends T> other)
orElse()接受类型T的任何参数,而orElseGet()接受类型为Supplier的函数接口,该接口返回类型为T的对象 。
orElse():如果有值则将其返回,否则返回指定的其它值。orElseGet():如果有值则将其返回,否则调用函数并将其返回调用结果。2. 使用时的区别
举例说明: 当Optional有值时:
public class OptionalTest { public static void main(String[] args) { List<Integer> list = Arrays.asList(10, 20, 30); int a = list.stream().reduce(Integer::sum).orElse(get(&34;)); int b = list.stream().reduce(Integer::sum).orElseGet(() -> get(&34;)); System.out.println(&34; + a); System.out.println(&34; + b); } public static int get(String name) { System.out.println(name + &34;); return 1; }}
输出结果:
a执行了方法a = 60b = 60
当Optional值为空时:
public class OptionalTest { public static void main(String[] args) { List<Integer> list = Arrays.asList(); int a = list.stream().reduce(Integer::sum).orElse(get(&34;)); int b = list.stream().reduce(Integer::sum).orElseGet(() -> get(&34;)); System.out.println(&34; + a); System.out.println(&34; + b); } public static int get(String name) { System.out.println(name + &34;); return 1; }}
输出结果:
a执行了方法b执行了方法a = 1b = 1
由上可以发现,orElse()方法在Optional值为非空时,也会计算传入的参数,而orElseGet()方法只有在Optional值为空时才会执行传入的函数。
3. 性能上的区别
由于orElseGet()不是每次都会调用传入的方法,所以orElseGet()方法在性能上要优于orElse()方法。
一般情况下,使用orElseGet()方法更好,除非默认对象已经定义好可以直接访问。
温馨提示:通过以上关于Java Optional中orElse()和orElseGet()的区别内容介绍后,相信大家有新的了解,更希望可以对你有所帮助。