一、什么是Optional
optional 是一个可以包含空或非空值的容器,用来避免空指针异常
二、创建Optional
//如果参数为空会抛出空指针异常
Optional<String> xiaoming = Optional.of("xiaoming");
//创建一个包含空的Optional对象
Optional<Object> empty = Optional.empty();
//可空的,即使参数为空,也不会抛出异常。根据参数是否是空值创建对应包含空或非空的Optional对象
Optional<Object> nullable = Optional.ofNullable(null);
三、常用方法
//值不为空返回值
xiaoming.get();
//当值为空时,抛出NoSuchElementException异常
// empty.get();
//是存在值的,true有值,false空值
xiaoming.isPresent();
//是空值的,true空值。false有值
xiaoming.isEmpty();
//如果存在值就执行函数
xiaoming.ifPresent(System.out::println);
//如果存在就执行第一个函数,否则执行第二个函数
xiaoming.ifPresentOrElse(System.out::println,()-> System.out.println("值是空的时候执行这个"));
empty.ifPresentOrElse(System.out::println,()-> System.out.println("值是空的时候执行这个"));
//满足过滤条件就返回自己,不满足返回包含空的optional
Optional<String> optional = xiaoming.filter(e -> e.length() > 10);
//当为空时返回空optional 否则返回包含映射返回值的optional
Optional<Integer> integer = xiaoming.map(String::length);
//Function 函数接口的方法返回一个Optional
Optional<String> s = xiaoming.flatMap(e -> Optional.of(e.toUpperCase()));
//如果optional不为空就返回值,否则返回参数的值
String xiaohong = xiaoming.orElse("xiaohong");
//不为空就返回值,否则就执行函数接口返回值
String s1 = xiaoming.orElseGet(() -> "xiaohong");