Optional
Optional是一个容器类,代表一个值存在或不存在
Optional容器类的常用方法:
- Optional.of(Tt):创建一个Optional实例
- Optional.empty():创建一个空的Optional实例
- Optional.ofNullable(Tt):若t不为nul1,创建Optional实例,否则创建空实例
- isPresent():判断是否包含值
- orElse(Tt):如果调用对象包含值,返回该值,否则返回t
- orElseGet(Suppliers):如果调用对象包含值,返回该值,否则返回s获取的值
- map(Functionf):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
- flatMap(Function mapper):与map 类似,要求返回值必须是Optional,需要自己包装
map与flatMap 区别:
map返回值是Option包装的,flatMap是直接返回方法返回值(适用于嵌套结构的option)
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Objects.requireNonNull(mapper.apply(value));
}
}
使用小技巧
- 返回值可能为null的可以用Optional包装;
- 属性为null的也可用Optional包装;
public class Man {
private Optional<User> optionalUser;
}