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
在某些场景中很大程度上精简了代码,增强了可读性。