体验了一波Optional的魅力,告别 if else

54 阅读1分钟

今天体验了一波Optional的魅力

需求: 1、有一个列表,每行有两个日期字符串,获取最新的日期进行展示 2、在所有显示的日期中,获取最新的一个日期,显示在第一行

截取代码片段

  • if else
String promulgateLastModifiedDate = promulgateLastModifiedDateMap.get(key);
String explainLastModifiedDate = explainLastModifiedDateMap.get(key);
if (StringUtils.isNotBlank(promulgateLastModifiedDate) && StringUtils.isNotBlank(explainLastModifiedDate)) {
    publishSituationVo.setLastUpdateDate(promulgateLastModifiedDate.compareTo(explainLastModifiedDate) > 0 ? promulgateLastModifiedDate : explainLastModifiedDate);
    lastModifyDate = publishSituationVo.getLastUpdateDate().compareTo(lastModifyDate) > 0 ? publishSituationVo.getLastUpdateDate() : lastModifyDate;
} else if (StringUtils.isNotBlank(promulgateLastModifiedDate)) {
    publishSituationVo.setLastUpdateDate(promulgateLastModifiedDate);
    lastModifyDate = promulgateLastModifiedDate.compareTo(lastModifyDate) > 0 ? promulgateLastModifiedDate : lastModifyDate;
} else if (StringUtils.isNotBlank(explainLastModifiedDate)) {
    publishSituationVo.setLastUpdateDate(explainLastModifiedDate);
    lastModifyDate = explainLastModifiedDate.compareTo(lastModifyDate) > 0 ? explainLastModifiedDate : lastModifyDate;
}
  • Optional
String promulgateLastModifiedDate = promulgateLastModifiedDateMap.get(orgName);
String explainLastModifiedDate = explainLastModifiedDateMap.get(orgName);
Optional<String> optPromulgate = Optional.ofNullable(promulgateLastModifiedDate).filter(StringUtils::isNotBlank);
Optional<String> optExplain = Optional.ofNullable(explainLastModifiedDate).filter(StringUtils::isNotBlank);

AtomicReference<String> lastModifyDate = new AtomicReference<>(sumLastModifyDate);
optPromulgate.map(p -> optExplain.filter(e -> e.compareTo(p) > 0).orElse(p))
        .ifPresent(date -> {
            publishSituationVo.setLastUpdateDate(date);
            lastModifyDate.set(date.compareTo(lastModifyDate.get()) > 0 ? date : lastModifyDate.get());
        });
sumLastModifyDate = lastModifyDate.get();

是不是瞬间高级并且优雅了,可读性也还可以,不过肯定是没有 if else 那么通俗易通,写出同事难度懂的代码就是好代码

image.png