java8-Optional

  • Optional 是为核心类库新设计的一个数据类型,用来替换 null 值。
  • 人们对原有的 null 值有很多抱怨,甚至连发明这一概念的Tony Hoare也是如此,他曾说这是自己的一个“价值连城的错误”
  • 用处很广,不光在lambda中,哪都能用
  • Optional.of(T),T为非空,否则初始化报错
  • Optional.ofNullable(T),T为任意,可以为空
  • isPresent(),相当于 !=null
  • ifPresent(T), T可以是一段lambda表达式 ,或者其他代码,非空则执行
public static void main(String[] args) {

 PersonModel personModel=new PersonModel();

 //对象为空则打出 -
 Optional<Object> o = Optional.of(personModel);
 System.out.println(o.isPresent()?o.get():"-");

 //名称为空则打出 -
 Optional<String> name = Optional.ofNullable(personModel.getName());
 System.out.println(name.isPresent()?name.get():"-");

 //如果不为空,则打出xxx
 Optional.ofNullable("test").ifPresent(na->{
 System.out.println(na+"ifPresent");
 });

 //如果空,则返回指定字符串
 System.out.println(Optional.ofNullable(null).orElse("-"));
 System.out.println(Optional.ofNullable("1").orElse("-"));

 //如果空,则返回 指定方法,或者代码
 System.out.println(Optional.ofNullable(null).orElseGet(()->{
 return "hahah";
 }));
 System.out.println(Optional.ofNullable("1").orElseGet(()->{
 return "hahah";
 }));

 //如果空,则可以抛出异常
 System.out.println(Optional.ofNullable("1").orElseThrow(()->{
 throw new RuntimeException("ss");
 }));

// Objects.requireNonNull(null,"is null");

 //利用 Optional 进行多级判断
 EarthModel earthModel1 = new EarthModel();
 //old
 if (earthModel1!=null){
 if (earthModel1.getTea()!=null){
 //...
 }
 }
 //new
 Optional.ofNullable(earthModel1)
 .map(EarthModel::getTea)
 .map(TeaModel::getType)
 .isPresent();

// Optional<EarthModel> earthModel = Optional.ofNullable(new EarthModel());
// Optional<List<PersonModel>> personModels = earthModel.map(EarthModel::getPersonModels);
// Optional<Stream<String>> stringStream = personModels.map(per -> per.stream().map(PersonModel::getName));

 //判断对象中的list
 Optional.ofNullable(new EarthModel())
 .map(EarthModel::getPersonModels)
 .map(pers->pers
 .stream()
 .map(PersonModel::getName)
 .collect(toList()))
 .ifPresent(per-> System.out.println(per));

 List<PersonModel> models=Data.getData();
 Optional.ofNullable(models)
 .map(per -> per
 .stream()
 .map(PersonModel::getName)
 .collect(toList()))
 .ifPresent(per-> System.out.println(per));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值