Optional.ofNullable与ifPresent的代码搭配

如果前面的判断不是null,则进行设置值。 一笔完成完美 ,额报错了,不适合多层直接调用。如果能接住就好了。
Optional.ofNullable(skuMap.get(esteem.getRelationId()).getSpuId()).ifPresent(secondaryMenuItemsVo::setRelationId);


public void OptTest(User user) {

// 第一种方式:存在空指针的风险,只要与一个对象为空就会空指针
String countryName = user.getAddress().getCountry().getCountryName();
System.out.println( "第一种方式:" + countryName );

// 第二种方式:各种if判断避免了空指针,但是if层级太深,代码冗长
if (user != null) {
Address address = user.getAddress();
if (address != null) {
Country country = address.getCountry();
if (country != null) {
String couName = country.getCountryName();
System.out.println( "第二种方式:" + couName );
}
}
}

// 第三种方式:代码简洁,避免空指针,武林那一步为空都会返回默认值
String counName = Optional.ofNullable( user )
.map( User::getAddress )
.map( Address::getCountry )
.map( Country::getCountryName )
.orElse( "china" );
System.out.println( "第三种方式:" + counName );

// 第三种方式:代码简洁,避免空指针,武林那一步为空都会返回自定义异常
String countryNameEx = Optional.ofNullable( user )
.map( User::getAddress )
.map( Address::getCountry )
.map( Country::getCountryName )
.orElseThrow( () -> new RuntimeException( "countryId is null" ) );
System.out.println( "第四种方式:" + countryNameEx );
}

posted @ 2022-01-11 22:22  三号小玩家  阅读(10691)  评论(0编辑  收藏  举报
Title
三号小玩家的 Mail: 17612457115@163.com, 联系QQ: 1359720840 微信: QQ1359720840