搜索
写经验 领红包
 > 运动

javaoptioaloelse(oelse与o区别)

在生活中,很多人可能想了解和弄清楚Java Optional中orElse()和orElseGet()的区别的相关问题?那么关于java optional orelse的答案我来给大家详细解答下。

java optional orelse(or else与or区别)

这两个方法表示当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()的区别内容介绍后,相信大家有新的了解,更希望可以对你有所帮助。