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

时尚类网站建设app 微商城网站建设

时尚类网站建设,app 微商城网站建设,小程序免费制作平台有赞,用myeclipse做网站前言: 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/359668/

相关文章:

  • 东莞做网站开发的公司怎么在360做网站
  • 好的网站建设网网站建设 东阿阿胶
  • 企业网站制作公司合肥百度网页版支付宝
  • 广东万高建设网站rp如何做网站
  • 绵阳新农网的网站是哪个公司做的注册公司的条件和要求
  • 昆山建设工程安监站网站wordpress主题 游戏
  • 网站 数据库 关系网站源码怎么预览
  • 宜兴城乡建设局网站肇庆企业推广
  • 贵州企业网站开发公司做网站服务器用国外的
  • 有关电子商务网站建设与维护的书籍网站建设技术知识
  • 国外黄冈网站推广房地产网
  • 上海人才网官网登录优化大师apk
  • 二手房网站排行精品课程网站建设毕业设计论文
  • 乐清建设网站公司网站推广公司有哪些
  • 品牌创意网站建设重大新闻事件
  • 网站开发策划案建一个网站需要多长时间
  • 娱乐公司网站建站背景介绍长安seo排名优化培训
  • 杭州思拓网站建设台州企业自助建站
  • 上饶网站网站建设网站虚拟主持人
  • 网站开发页面关于建设网站的申请
  • 自助建站的平台有官网建手机网站吗
  • 做英文网站的标准字体wordpress有微信插件
  • 站酷的网址建设网站技术数据策划书
  • 轻设计 让网站灵敏轻便的6个技巧网站全是乱码
  • 桥梁建设网站淘宝客网站制作视频教程
  • 开封网站制作哪家好17网站一起做网店普
  • 建设工程 法律 网站山东泰安网络科技有限公司
  • 网站网址相对路径如何设置中国建设通官方网站
  • 专业的手机网站建设公司知名做网站
  • 自适应网站怎么做m站怎么做淘宝卷网站