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

太仓苏州网站建设天猫电商平台

太仓苏州网站建设,天猫电商平台,扬州外贸网站建设公司,免费做团购网站的软件前言: 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/562432/

相关文章:

  • 商城网站建设公司价格微信头像定制软件
  • 遵化市城乡建设局网站个人网站如何做流量
  • 网站建设四端一体网站建设维护合同书
  • 为什么我的网站没有百度索引量搜狗做网站怎么样
  • 免费图标下载网站上海公关公司
  • 内容型网站的运营在线做图工具
  • 阿里云服务器wordpress建站教程企业微信功能开发
  • 东莞教育建站网站seo查询工具
  • 网站建设以及推广销售客户怎么找个人购物网站怎么做
  • 免费建站免费二级建设一下网站要求提供源码
  • 策划方案模板seo方式包括
  • 零基础 网站丹东有做公司网站的吗
  • 家政服务公司网站建设方案策划书金融网站欣赏
  • 建站记录查询云南政务服务网
  • 做网站销售水果易企秀网站怎么做轮播图
  • seo和sem的区别是什么seo与网站建设
  • 石家庄网站系统开发可以购买网站空间的网站
  • 网站设计应该怎么做怎么做的360网站打不开
  • 网站如何做分享阿甘网站建设
  • 莆田企业自助建站计算机前端培训
  • 营销网站建设教学网站用什么软件编写
  • 国外优秀网页设计网站研发app公司
  • 免费企业名录网站北京网站设计公司有哪些
  • 网站设计模式有哪些页面设计存在的问题
  • 企业手机网站建设机构成都住建局官网投诉
  • html5手机网站制作教程关键词点击价格查询
  • 农业公园网站建设网站托管价格
  • 试百客 专业做试用的网站绍兴外贸网站建设
  • 洱源县建设局门户网站移动网站做微信小程序
  • 网站接入服务器商查询开发h5网站开发