Optional 常用方法总结

Optional 类是 JAVA 8 提供的判断程序是否为空提供的包装工具类;可以减少代码中的 是否为空的判断,以及减少 NullPointerExceptions;使得程序变得更为健壮;有助于创建简单、可读性更强、比对应程序错误更少的程序 。
Optional 常用的方法总结:

  • empty : 创建一个空的Optional对象
  • of:为非null的值创建一个Optional 。of方法通过工厂方法创建Optional类 。需要注意的是 , 创建对象时传入的参数不能为null 。如果传入参数为null,则抛出NullPointerException 。因此不经常用 。
  • ofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional 。
  • isPresent: 检查一个Optional对象中是否有值,只有值非空才返回truex,否则返回false 。
  • ifPresent:如果Optional实例有值则为其调用consumer,否则不做处理
  • get:如果Optional有值则将其返回,否则抛出NoSuchElementException 。因此也不经常用 。
  • orElse:如果有值则将其返回,否则返回指定的其它值 。经常用于判断返回默认值的场景;
  • orElseGet:orElseGet与orElse方法类似 , 区别在于得到的默认值 。orElse方法将传入的字符串作为默认值 , orElseGet方法可以接受Supplier接口的实现用来生成默认值
  • orElseThrow:如果有值则将其返回,否则抛出supplier接口创建的异常 。
  • filter: 接收一个函数式接口 ,如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional 。
  • map:如果有值,则对其执行调用mapping函数得到返回值 。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional 。
  • flatMap:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional 。
通过示例查看 optional 带来的好处
示例一:
根据用户的对象获取用户的名称 , 如果存在则返回用户名称,没有则返回 unknown ;没有使用 Option 的 Java 实现代码如下:
public static String getName2(User user){       if (user!=null){           String name = user.getName();           if (StringUtils.isBlank(name)){               return "unKnown";           }           return name;       }       return "unKnown";   }没有使用Optional 时,需要不断的判断是否为空,增加了代码的可读性和维护性,使用 Optional 之后,代码如下:
public static String getName(User user){       return  Optional.ofNullable(user).map(p->p.getName()).orElse("unKnown");   }使用Optional 之后 , 通过一行便完成了 上述的功能,减少了层层的 if 判断
示例 二:从一批学生中 , 选出年龄大于等于18,参加过考试并且成绩大于80的人去参加比赛 。
public void useJava8() {   List<Student> studentList = initData();   for (Student student : studentList) {       Optional<Student> studentOptional = Optional.of(student);       Integer score = studentOptional.filter(s -> s.getAge() >= 18).map(Student::getScore).orElse(0);        if (score > 80) {           System.out.println("入?。?quot; + student.getName());       }   }}【Optional 常用方法总结】

    推荐阅读