- Optional对象创建
// 参数不能是nullOptionaloptional1 = Optional.of(1); // 参数可以是nullOptional optional2 = Optional.ofNullable(null); // 参数可以是非nullOptional optional3 = Optional.ofNullable(2);
- orElse判断空指针, 存在即返回, 无则提供默认值.
public Part findById(Long id) { Optionalpart = partDao.findById(id); return part.orElse(null); }
- orElseGet判断为空执行函数, 存在即返回, 无则由函数来产生
return user.orElseGet(() -> createData()); //而不要 return user.isPresent() ? user: createData() ;
- orElseThrow():值不存在则抛出异常,存在则什么不做
Optionaloptional1 = Optional.ofNullable(1);Optional optional2 = Optional.ofNullable(null); optional1.orElseThrow(()->{throw new IllegalStateException();}); try{ // 抛出异常 optional2.orElseThrow(()->{throw new IllegalStateException();});}catch(IllegalStateException e ){ e.printStackTrace();}
- ifPresent返回boolean, 如果存在则对它做点什么
user.ifPresent(System.out::println); //而不要下边那样if (user.isPresent()) { System.out.println(user.get());}
-
map 函数
当 user.isPresent()
为真, 获得它关联的 orders
, 为假则返回一个空集合时.
我们用上面的 orElse
, orElseGet
方法都乏力时, 那原本就是 map
函数的责任, 我们可以这样一行
return user.map(u -> u.getOrders()).orElse(Collections.emptyList()) //上面避免了我们类似 Java 8 之前的做法if(user.isPresent()) { return user.get().getOrders();} else { return Collections.emptyList();}