今天体验了一波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 那么通俗易通,写出同事难度懂的代码就是好代码