博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<java8>Java8 Optional 的使用
阅读量:6813 次
发布时间:2019-06-26

本文共 1350 字,大约阅读时间需要 4 分钟。

hot3.png

  •  Optional对象创建
// 参数不能是nullOptional
optional1 = Optional.of(1); // 参数可以是nullOptional
optional2 = Optional.ofNullable(null); // 参数可以是非nullOptional
optional3 = Optional.ofNullable(2); 
  •  orElse判断空指针, 存在即返回, 无则提供默认值.
public Part findById(Long id) {		Optional
part = partDao.findById(id); return part.orElse(null); }
  •  orElseGet判断为空执行函数, 存在即返回, 无则由函数来产生
return user.orElseGet(() -> createData()); //而不要 return user.isPresent() ? user: createData() ;
  •  orElseThrow():值不存在则抛出异常,存在则什么不做
Optional
optional1 = 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, 为假则返回一个空集合时.

我们用上面的 orElseorElseGet 方法都乏力时, 那原本就是 map 函数的责任, 我们可以这样一行

return user.map(u -> u.getOrders()).orElse(Collections.emptyList()) //上面避免了我们类似 Java 8 之前的做法if(user.isPresent()) {  return user.get().getOrders();} else {  return Collections.emptyList();}

 

转载于:https://my.oschina.net/u/3970972/blog/3025183

你可能感兴趣的文章