首先准备一个pojo类
public class Student {
private String name;
private Integer age;
}
创建Optional
// 构建一个value为null的optional对象
Optional<Student> emptyOpt = Optional.empty();
// 构建一个value不为null的optional对象
Optional<Student> opt = Optional.of(new Student("hh",18));
// 构建一个value为null的optional对象
Optional<String> opt1 = Optional.ofNullable(null);
// Optional<Student> emptyOpt1 = Optional.of(null); 会抛异常
注意Optional.of创建对象时传入的参数不能为null。如果传入参数为null,会抛出异常
Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.Optional.<init>(Optional.java:96)
at java.util.Optional.of(Optional.java:108)
at com.wupx.dto.Student.main(Student.java:20)
Process finished with exit code 1
isPresent和get方法
//isPresent方法用来检查Optional实例中是否包含值存在返回true,否则返回false。
if(opt.isPresent()){
//在Optional实例内调用get()返回已存在的值.存在返回true,否则返回false。
System.out.println(opt.get());
}
输出为
Student(name=hh, age=18)
ifPresent
如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。
opt.ifPresent( student-> System.out.println(student.getName()));
输出
hh
返回默认值
orElse
如果有值则将其返回,否则返回指定的其它值。
orElseGet
orElseGet方法可以接受Supplier接口的实现用来生成默认值。
orElseThrow
如果存在返回包含的值,否则抛出提供的异常
System.out.println(opt.orElse(new Student("默认值",18))); //Student(name=hh, age=18)
System.out.println(emptyOpt.orElse(new Student("默认值",18)));//Student(name=默认值, age=18)
emptyOpt.orElseGet( ()-> new Student("默认值",18) );//Student(name=默认值, age=18)
empty.orElseThrow(ValueAbsentException::new);
map
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。此方法支持对optional值进行后处理,而无需显式检查返回状态
filter
如果存在值,并且值与给定谓词匹配,则返回描述该值的Optional,否则返回空Optional。
opt.filter(s -> s.getAge()>10).map(Student::getName);