看一个比较复杂的例子。
假如我们需要的数据层次比较深。
String cityCode = customer.getAddress().getCity().getCityCode().substring(0,3);
这样获取是不合理的,因为其中的某一环,可能是空,会抛出空指针的。所以,我们需要一层层的进行判断。
public void getCityCode(Customer customer) {
String cityCode = "000";
if (customer != null) {
Address address = customer.getAddress();
if (null != address) {
City city = address.getCity();
if (city != null) {
String code = city.getCityCode();
if (null != code && code.length() >= 3) {
cityCode = code.substring(0, 3);
}
}
}
}
System.out.println(cityCode);
}
使用Optional的lambda语法,我们可以把代码改成下面这样:
public void getCityCode(Customer customer) {
String cityCode = Optional.ofNullable(customer)
.map(c -> c.getAddress())
.map(a -> a.getCity())
.map(c -> c.getCityCode())
.filter(s -> s.length() >= 3)
.map(s -> s.substring(0, 3))
.orElse("000");
}