先准备创建本次测试需要用到对象
@Data @Builder
class Person {
private Province province;
}
@Data @Builder
class Province {
private City city;
}
@Data @Builder
class City {
private Xian xian;
}
@Data @Builder
class Xian {
private Town town;
}
@Data @Builder
class Town {
private Cun cun;
}
@Data
@Builder
class Cun {
private String cunName;
}
本次测试了两次。
1. 方法一是比较传统的做法,判空并获取值,清晰明了,但缺点是代码比较荣誉,不停的判断判空;
2. 方法二是利用java8新特性stream方式取值,相比较第一种比较简洁;简单一行代码就可以代替之前多层判断;
所以更倾向于第二种。
public static void main(String[] args) {
/*
* 准备测试数据
* */
Cun cun = Cun.builder().cunName("梁楼").build();
Town town = Town.builder().cun(cun).build();
Xian xian = Xian.builder().town(town).build();
City city = City.builder().xian(xian).build();
Province province = Province.builder().city(city).build();
Person person = Person.builder().province(province).build();
/**
* 方法一
*/
String cName = null;
if (person.getProvince() != null) {
Province p = person.getProvince();
if (p != null && p.getCity() != null) {
City c = p.getCity();
if (c != null && c.getXian() != null) {
Xian x = c.getXian();
if (x != null && x.getTown() != null) {
Town t = x.getTown();
if (t != null && t.getCun() != null) {
Cun c2 = t.getCun();
if (c2 != null && c2.getCunName() != null) {
cName = c2.getCunName();
}
}
}
}
}
}
System.out.println("方法一结果:" + cName);
System.out.println("---------------------------------------------------");
/**
* 方法二
*/
String name = Optional.ofNullable(person.getProvince())
.map(Province::getCity)
.map(City::getXian)
.map(Xian::getTown)
.map(Town::getCun)
.map(Cun::getCunName)
.orElse(null);
System.out.println("方法二结果:" + name);
}
执行结果: