详细分析请参考:
1.https://www.cnblogs.com/rjzheng/p/9163246.html
2.https://blog.csdn.net/qq_35387940/article/details/105386359
准备实体类
public class Type {
private BigDecimal id;
private String name;
// 省略get和set......
}
public class User {
private BigDecimal id;
private String avatar;
private String email;
// 💤实体类组合
private Type type;
// 省略get和set......
}
实例1
⏹获取对象中的属性,若不存在返回默认值
User user = null;
// 😒之前写法,三元表达式
String emailTest1 = ObjectUtils.isEmpty(user) ? "123@qq.com" : user.getEmail();
System.out.println(emailTest1);
// 💪现在写法,可读性更高
String email1 = Optional.ofNullable(user).map(User::getEmail).orElse("123@qq.com");
System.out.println(email1);
实例2
⏹获取嵌套实体类对象中的属性,若不存在则返回默认值
User user = null;
// 😒之前写法,需要不断的判断对象和属性是否为null
BigDecimal typeTestId = null;
if (!ObjectUtils.isEmpty(user)) {
Type type = user.getType();
if (!ObjectUtils.isEmpty(type)) {
typeTestId = type.getId();
} else {
typeTestId = BigDecimal.ZERO;
}
} else {
typeTestId = BigDecimal.ZERO;
}
System.out.println(typeTestId);
// 💪现在写法,链式调用,只需在最后指定默认值
BigDecimal typeId = Optional.ofNullable(user)
.map(User::getType)
.map(Type::getId)
.orElse(BigDecimal.ZERO);
System.out.println(typeId);
实例3
⏹根据条件获取对象,若满足条件的对象不存在则返回默认对象
User user = null;
// 😒之前写法
User userTest2 = null;
if (!ObjectUtils.isEmpty(user)) {
String email = user.getEmail();
if ("110@qq.com".equals(email)) {
userTest2 = user;
}
} else {
userTest2 = new User();
userTest2.setEmail("110@qq.com");
}
System.out.println(userTest2);
// 💪现在写法
User user2 = Optional.ofNullable(user)
.filter(item -> "110@qq.com".equals(item.getEmail()))
.orElseGet(() -> {
User user1 = new User();
user1.setEmail("110@qq.com");
return user1;
});
System.out.println(user2);