Java Optional 对Null的友好
以前的做法
开发过程中,经常会有null的判断,会写很多if判断,导致代码繁多切不简洁,在kotlin里面,null的友好处理是在后面加个?,在java中,以前的做法是如下:
List<String> des = message.getDestinations();
String touser;
if (des != null && des.size() > 0) {
touser = des.get(0);
if (touser == null || touser.length() == 0) {
touser = "default-user";
}
} else {
touser = "default-user";
}
如果用上工具类,代码会有所精简
List<String> des = message.getDestinations();
String touser;
if (!CollectionUtils.isEmpty(des)) {
touser = des.get(0);
if (StringUtils.isBlank(touser)) {
touser = "default-user";
}
} else {
touser = "default-user";
}
多余的代码都是在if null的判断上,那么以上的代码的逻辑就是取list中的第一个元素,没有则返回
default-user。那么是否有更简洁的写法呢?请看下面
现在的做法
String touser =
Optional.ofNullable(message.getDestinations())
.filter(x -> x.size() > 0)
.map(y -> y.get(0))
.orElse("default-user");
简析上面代码
-
Optional.ofNullable包装了返回的List<String>对象 -
filter的执行是当message.getDestinations()返回的不为null,所以大胆的执行x.size() -
filter返回同样是一个Optional的包装 -
map的执行也是当包装对象不为null,所以大胆的执行y.get(0),因为filter已经过去了size>0 -
orElse的执行是当以前面的所有执行的返回对象为null时,兜底的
从上面的可以看出,
Optional.ofNullable在某些场景中很大程度上精简了代码,增强了可读性。











网友评论