1. 未使用Optional时
if (user != null) {
Address address = user.getAddress();
if (address != null) {
Country country = address.getCountry();
if (country != null) {
String isocode = country.getIsocode();
if (isocode != null) {
isocode = isocode.toUpperCase();
}
}
}
}
2. 使用了Optional后
public class OptionalTest {
public static User createUser() {
User u = new User();
ReceiveAddr receiveAddr = new ReceiveAddr();
Country country = new Country();
// country.setIsoCode("");
receiveAddr.setCountry(country);
u.setReceiveAddr(receiveAddr);
return u;
}
public static void main(String[] args) {
User user = createUser();
String isoCode = Optional.of(user)
.map(User::getReceiveAddr)
.map(ReceiveAddr::getCountry)
.map(Country::getIsoCode)
.orElseGet(() -> "default");
System.out.println(isoCode);
}
}
map中获取的返回值自动被Optional包装,即返回值 -> Optional<返回值>
flatMap中返回值保持不变,但必须是Optional类型,即Optional<返回值> -> Optional<返回值>