Java8-5-Optional
Optional 类 (java.util.Optional) 是一个容器类,代表一个值存在或不存在, 原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
常用方法
| 方法 | 说明 | 
|---|---|
Optional.of(T t) | 
创建一个 Optional 实例 | 
Optional.empty() | 
创建一个空的 Optional 实例 | 
Optional.ofNullable(T t) | 
若 t 不为 null,创建 Optional 实例,否则创建空实例 | 
isPresent() | 
判断是否包含值 | 
orElse(T t) | 
如果调用对象包含值,返回该值,否则返回 t | 
orElseGet(Supplier s) | 
如果调用对象包含值,返回该值,否则返回 s 获取的值 | 
map(Function f) | 
如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty() | 
flatMap(Function mapper) | 
与 map 类似,要求返回值必须是Optional | 
使用
创建对象
Optional类似包装类,将具体的数据封装 Optional 对象内部,然后使用 Optional 内部封装号的方法操作数据,从而避免空指针异常。
1.一般使用 Optional 静态方法ofNullable把数据封装成 Optional 对象,无论传入的参数是否为 null 都不会出现问题 
1  | Author author = getAuthor();  | 
2.如果 确定对象不是空 可以使用 Optional 的静态方法 of 将数据封装成 Optional 对象 
1  | Optional<Author> authorOptional = Optional.of(author);  | 
3.如果方法的返回值为 Optional 类型,经判断发现某次计算得到的返回值为 null,需要把 null 封装成 Optional 对象返回,可以使用 Optional 的静态方法 empty 进行封装 
1  | Optional.empty();  | 
安全消费值
如果获取到 Optional 对象需要使用数据,使用其 ifPresent 方法消费其中的值
该方法判断其内封装的数据是否为空,不空时执行具体的消费代码,具有安全性
1  | Author author = getAuthor();  | 
安全获取值
期望安全获取值,推荐使用 Optional 提供的以下方法:
orElseGet
获取数据并且设置数据为空时的默认值,如果数据不为空就能获取到该数据,如果为空根据传入的参数创建对象作为默认返回值信息
1  | Optional<Author> authorOptional = Optional.ofNullable(getAuthor());  | 
orElseThrow
获取数据,如果数据不为空就能获取到该数据,如果为空则根据传入的参数来创建异常抛出
1  | Optional<Author> authorOptional = Optional.ofNullable(getAuthor());  | 
过滤
使用 filter 方法进行数据过滤,原本有数据,但不符合要求,会变成无数据的 Optional 对象 
1  | Optional<Author> authorOptional = Optional.ofNullable(getAuthor());  | 
判断
 使用 ifPresent 方法进行是否存在数据的判断,如果为空返回值为 false,如果不为空,返回值为t rue
1  | Optional<Author> authorOptional = Optional.ofNullable(getAuthor());  | 
数据转换
 Option 提供 map 方法对数据进行转换,并且转换得到的数据还是被 Optional 包装好的,保证使用安全 
1  | Optional<Author> authorOptional = Optional.ofNullable(getAuthor());  | 










