Optional类中的orElse和orElseGet的区别

    技术2022-07-11  101

      1. orElse方法与orElseGet方法对比表

    Optional内对象参数效果注释null对象相同

    orElse和orElseGet方法都会返回参数对象

    不为null对象相同返回Optional内对象null有返回值的函数相同orElse和orElseGet方法都会返回参数内函数返回值不为null有返回值的函数不同返回Optional内对象,但orElseGet不会执行函数内容,orElse会执行函数内容

    2. 简单示例(仅针对orElse与orElseGet方法不同的情况,即Optional内对象不为null,且参数为有返回值函数)

     2.1 准备类

    public class Staff { String name; Integer age; ... // getter setter }

    2.2 orElse 和 orElseGet的对比

    @Test void optionalTest(){ Staff staff = new Staff("Jerome",12); System.out.println("----------------------orElseGet---------------------------"); staffName = Optional.ofNullable(staff).map(s -> s.getName()).orElseGet(this::getName); System.out.println(staffName); System.out.println("----------------------orElse---------------------------"); staffName = Optional.ofNullable(staff).map(s -> s.getName()).orElse( getName()); System.out.println(staffName); } private String getName(){ System.out.println("Get String if null"); return "Get String"; }

    显示效果

    ----------------------orElseGet--------------------------- Jerome ----------------------orElse--------------------------- Get String if null Jerome

    Processed: 0.013, SQL: 9