当前位置: 首页 > news >正文

品牌网站建设 2蝌蚪小网页设计师培训价格

品牌网站建设 2蝌蚪小,网页设计师培训价格,有哪个网站教人做美食,十堰响应式网站前言: Optional 是 Java 8 的新特性,专治空指针异常(NullPointerException, 简称 NPE)问题,它是一个容器类,里面只存储一个元素(这点不同于 Conllection)。 为方便用户通过 Lambda 表…

前言:

        Optional 是 Java 8 的新特性,专治空指针异常(NullPointerException, 简称 NPE)问题,它是一个容器类,里面只存储一个元素(这点不同于 Conllection)。

        为方便用户通过 Lambda 表达式调用 Optional 的方法,部分方法(如:filter、ifPresent、map、orElseGet)需传入函数式接口(如:Predicate、Consumer、Function、Supplier)参数。


项目场景:

  业务需求是这样的,从第三方拉取用户信息,然后保存到公司自己的数据库,而第三方接口返回的数据是 JSON 格式的,需要获取到用户地址相关信息,但是用户地址相关信息却藏的十分深,如下面所示,JSON 节点是这样的:

{"userInfo":{"userDetails":{"city":"深圳市"}}}

基本实现

创建相关实体用来接收

import lombok.Data;@Data
public class User {private Integer id;				//   idprivate UserInfo userInfo;		//   用户信息public User(UserInfo userInfo) {this.userInfo = userInfo;}
}
import lombok.Data;@Data
public class UserInfo {private String userName;			//   用户名称private UserDetails userDetails;	//   用户详情public UserInfo(UserDetails userDetails) {this.userDetails = userDetails;}
}
import lombok.Data;@Data
public class UserDetails {private String address;			//   住址private String city;			//   城市public UserDetails(String city) {this.city = city;}
}

示例代码:

1.常用的写法

缺点:if嵌套非常深

import com.test.entity.User;
import com.test.entity.UserDetails;
import com.test.entity.UserInfo;import java.util.Optional;public class TestService {public static void main(String[] args) {UserDetails userDetails = new UserDetails("深圳市");UserInfo userInfo = new UserInfo(userDetails);User user = new User(userInfo);System.out.println(getCity(user));}/*** 以前的写法* @param user  用户对象* @return  用户所在城市*/public static String getCity(User user){if(user != null){UserInfo userInfo = user.getUserInfo();if(userInfo != null){UserDetails userDetails = userInfo.getUserDetails();if(userDetails != null){return userDetails.getCity();}}}return null;}
}

2.JAVA8写法

优点:不用再额外判断空指针

import com.test.entity.User;
import com.test.entity.UserDetails;
import com.test.entity.UserInfo;import java.util.Optional;public class TestService {public static void main(String[] args) {UserDetails userDetails = new UserDetails("深圳市");UserInfo userInfo = new UserInfo(userDetails);User user = new User(userInfo);System.out.println(getCity_java8(user));}/*** java8写法* @param user  用户对象* @return  用户所在城市*/public static String getCity_java8(User user){return Optional.ofNullable(user).map(u -> u.getUserInfo()).map(d -> d.getUserDetails()).map(t -> t.getCity()).orElse(null);}
}

源码解析:

为什么Optional不用判断空指针了呢,其实这并没有用什么高超的技术,看源码可以发现其实是它已经帮我们处理好了

1.映射元素(map)

//将 T 类型元素映射为 U 类型元素
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {Objects.requireNonNull(mapper);if (!isPresent())return empty();else {return Optional.ofNullable(mapper.apply(value));}
}

 2.创建容器(ofNullable)

 public static <T> Optional<T> ofNullable(T value) {return value == null ? empty() : of(value);
}

3.容器判空(isPresent) 

// 判断 Optional Value 有没有值
public boolean isPresent() {return value != null;
}

http://www.yayakq.cn/news/715214/

相关文章:

  • 福建省网站建设网络营销推广方案心得
  • 做电影网站用什么服务器wordpress小程序课程
  • 做网站咋不用买虚拟机国外黄冈网站推广软件免费吗
  • 不用js可以做网站吗淄博网站seo
  • 网站很难被百度收录下载网站站开发
  • 东莞市长安网站建设公司泰安网站建设dxkjw
  • 北京4网站建设怎么自己做代刷网站
  • flash互动网站开发wordpress实验室模板
  • 网站开发的工作流程网站建设费怎样摊销
  • 东兴网站建设如何找厂家地址
  • 网站多久备案一次吗海淀区玉泉小学网站 建设方
  • 社交媒体 网站卧龙区网站建设页面
  • 免费做链接的网站吗wordpress网站实现微信登录
  • 校园网站建设管理工作制度下载app的软件并安装
  • 做网站运营的要求首页网站怎么做的
  • 网站开发模合同生物科技公司网站模板
  • 酷玛网站建设网站建设部门
  • 做网站的程序源码vi设计素材
  • 床上爱做网站无锡市政设施建设工程有限公司
  • 湖南星大建设集团有限公司网站江海区建设局网站
  • 湛江做网站多少钱敬请期待前面一句
  • 网站单页别人是怎么做的筑龙网建筑资料下载
  • 长治网站建设哪家好做微课常用的网站有哪些
  • 青浦华新网站建设电商小程序多少钱
  • 网站建设资源库达县网站制作
  • 网站建设好做吗网站的栏目结构简图怎么做
  • 建设网站要做的工作总结公司建网站的步骤是什么
  • 网站建设验收书网站网格
  • 网站建设的目的与意义如何做贴吧类网站多钱
  • 阿里云网站备案多少天网站页面链接怎么做