Java 8系列:
Java 8系列之Lambda表达示
Java 8系列之StreamApi
Java 8系列之Collector
Java 8系列之Optional
Java 8系列之Future
一.创建Optional对象
- 声明一个空的Optional
//1.empty:返回一个空的 Optional 实例
Optional<Student> optStudent = Optional.empty();
- 依据一个值创建Optional
Student student1 = new Student("mm", 22, 78, Student.Status.Busy);
Student student2 = null;
//of:将指定值用 Optional 封装之后返回,如果该值为 null ,则抛出一个 NullPointerException
Optional of = Optional.of(student2);
System.out.println(“of中放空值会报NullPointerException:”+of);
- 可接受null的Optional
//ofNullable:将指定值用 Optional 封装之后返回,如果该值为 null ,则返回一个空的 Optional 对象
Optional ofNullable = Optional.ofNullable(student2);
System.out.println(“ofNullable中可放空值:”+ofNullable);
二. Optional类的基本方法
- filter:如果值存在并且满足提供的谓词,就返回包含该值的 Optional 对象;否则返回一个空的Optional 对象
Optional<Student> optStu = Optional.of(student1);
Optional<Student> optionalStudent = optStu.filter(s -> "kk".equals(s.getName()));
System.out.println("filter后:"+optionalStudent);
- flatMap:如果值存在,就对该值执行提供的 mapping 函数调用,返回一个 Optional 类型的值,否则就返回一个空的 Optional 对象
- map:如果值存在,就对该值执行提供的 mapping函数调用
- orElse:如果有值则将其返回,否则返回一个默认值
String stuName = optionalStudent.map(s -> s.getName()).orElse("kdkdkdk");
System.out.println("学生姓名:"+stuName);
- get:如果该值存在,将该值用 Optional 封装返回,否则抛出一个 NoSuchElementException 异常,是这些方法中最简单但又最不安全的方法
System.out.println(optionalStudent.get());
- ifPresent(Consumer<? super T>):让你能在变量值存在时执行一个作为参数传入的方法,否则就不进行任何操作
Optional.of(student1).filter(s ->
"mm".equals(s.getName()))
.ifPresent(x -> System.out.println("ok"));
isPresent 如果值存在就返回 true ,否则返回 false
System.out.println("isPresent:"+optionalStudent.isPresent());
- orElseGet 如果有值则将其返回,否则返回一个由指定的 Supplier 接口生成的值orElseGet(Supplier<? extends T> other) 是 orElse 方法的延迟调用版, Supplier方法只有在 Optional 对象不含值时才执行调用。如果创建默认值是件耗时费力的工作,你应该考虑采用这种方式(借此提升程序的性能),或者你需要非常确定某个方法仅在Optional 为空时才进行调用,也可以考虑该方式(这种情况有严格的限制条件)
- orElseThrow 如果有值则将其返回,否则抛出一个由指定的 Supplier 接口生成的异常