美文网首页
orElse()和orElseGet()的详细区别

orElse()和orElseGet()的详细区别

作者: 加一片柠檬233 | 来源:发表于2019-03-10 17:13 被阅读0次

    orElse()方法的描述是“返回值,如果存在,否则返回其他。
    orElseGet()方法的描述是“返回值如果存在,否则调用其他值并返回该调用的结果。

    public T orElse(T other)
    public T orElseGet(Supplier<? extends T> other)
    

    有上可知,orElse() 接受类型T的 任何参数,而orElseGet()接受类型为Supplier的函数接口,该接口返回类型为T的对象 。

    当Optional的值是空值时,无论orElse还是orElseGet都会执行;而当返回的Optional有值时,orElse会执行,而orElseGet不会执行。默认情况下,每次使用orElseGet() 更有意义,除非默认对象已经构造并且可以直接访问。

    1. 返回的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
    
    1. 返回的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
    

    相关文章

      网友评论

          本文标题:orElse()和orElseGet()的详细区别

          本文链接:https://www.haomeiwen.com/subject/tdfppqtx.html