Java Optional 对Null的友好

Java Optional 对Null的友好

以前的做法

开发过程中,经常会有null的判断,会写很多if判断,导致代码繁多切不简洁,在kotlin里面,null的友好处理是在后面加个?,在java中,以前的做法是如下:

List 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 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对象
  • filter的执行是当message.getDestinations()返回的不为null,所以大胆的执行x.size()
  • filter返回同样是一个Optional的包装
  • map的执行也是当包装对象不为null,所以大胆的执行y.get(0),因为filter已经过去了size>0
  • orElse的执行是当以前面的所有执行的返回对象为null时,兜底的

从上面的可以看出,Optional.ofNullable在某些场景中很大程度上精简了代码,增强了可读性。

你可能感兴趣的:(Java Optional 对Null的友好)