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 。
示例一:
根据用户的对象获取用户的名称 , 如果存在则返回用户名称,没有则返回 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 常用方法总结】
推荐阅读
- 王者上官婉儿怎么连招飞天口诀(上官婉儿的6种飞天方法口诀)
- 上官婉儿怎么连招飞天口诀9种方法(上官婉儿100%飞天连招)
- 华为手机怎么截屏三种方法(为什么华为不能截长屏)
- 吊带锻炼方法 训练吊带怎么用练腹肌
- 安化黑茶怎么泡才正确方法 安化黑茶怎么泡
- 有什么方法可以快速去除房间的老鼠?
- 选择婴儿消毒锅的方法有哪些 选择婴儿消毒锅的方法介绍
- 田黄石最精确的鉴定方法 田黄石怎么鉴定
- 椒盐怎么制作方法 椒盐怎么制作
- 黑糖的保存方法不会硬 黑糖的保存方法