作用:解决空指针异常(NullPointerException)
如下代码:
String code =
user.getAddress().getCountry().getCode().toUpperCase()
复制代码
每一步都可能报NullPointerException
jdk8之前要判断每一步是否为null:
if (null != user) { Address address = user.getAddress(); if (null != address) { Country country = address.getCountry(); if (null != country) { String code = country.getCode(); if (null != code) { code.toUpperCase(); } } }}
复制代码
使用optional方法简化代码:
optional.map(User::getAddress).map(Address::getCountry) .map(Country::getCode).orElse("code");
复制代码
方法介绍
创建optional方法:
of 创建时,如果传值为null,则抛出异常
ofNullable 创建时,如果传值为null,则创建一个空的optional
例:Optional optional = Optional.OfNullable(user);
过滤方法:
filter:依条件过滤对象,其返回值为原始对象
Optional user = optional.filter(c -> c.getAge().equals(1));
map:过滤出的结果为null,不会抛出异常
Optional address = optional.map(User::getAddress);
flatMap:过滤出的结果为null,抛出异常
Optional country = address.map(Address::getCountry);
如果为null,设置默认值:
orElse:为null,则返回默认值
orElseGet:为null,则返回默认值
orElseThrow:为null,则抛出异常
判断是否有值:
isPresent:判断optional是否为null
取值:
get:获取optional中的对象
为null,则不调用:
isPresent:判断optional是否为null
public static void main(String[] args) {
User user = new User();
Optional optional = Optional.ofNullable(user);
optional.ifPresent(User::getAddress);
}
private static void print(Address address) {
System.out.println(address.getCountry());
}
空值:
empty:空值