java - 我如何重构修复冗余空检查
问题描述
在以下代码块中出现冗余空检查错误。有人可以帮我重构它:
private Date pickRecent(Date d1, Date d2, Date d3, Date crd) {
logger.debug("d1: " + d1 + " d2: " + d2 + " d3: " + d3 + " crd: " + crd);
// all null
if (d1 == null && d2 == null && d3 == null) return crd;
logger.debug("through all");
// two null
if (d1 == null && d2 == null) return d3;
if (d1 == null && d3 == null) return d2;
if (d2 == null && d3 == null) return d1;
logger.debug("through two");
// one null
if (d1 == null) if (d2.after(d3)) return d2; else return d3;
if (d2 == null) if (d1.after(d3)) return d1; else return d3;
if (d3 == null) if (d1.after(d2)) return d1; else return d2;
logger.debug("through one");
// none null
if (d1.after(d2) && d1.after(d3)) return d1;
if (d2.after(d1) && d2.after(d3)) return d2;
if (d3.after(d1) && d3.after(d2)) return d3;
if (d1.equals(d2) && d1.equals(d3)) return d1;
logger.debug("through none");
return null;
}
解决方案
这是一种可能的解决方案...
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
public class RecentDate
{
public static void main(String[] args)
{
System.out.println(pickRecent(new Date(1, 1, 1), new Date(2, 2, 2), new Date(3, 3, 3), new Date(4, 4, 4)));
System.out.println(pickRecent(null, null, null));
}
private static Date pickRecent(Date...dates)
{
return Arrays.stream(dates).filter(d -> d != null).max(Comparator.naturalOrder()).orElse(null);
}
}
输出:
Wed May 04 00:00:00 CST 1904
null
推荐阅读
- java - 带“或”的动态参数
- javascript - 如何为 Angular 2+ 通用定义全局虚拟文档对象?
- dc.js - remove_empty_bins 不适用于 crossfilter 中的 elasticX
- service-worker - 自定义推送服务
- c - 连接两个十六进制整数并将它们保存在 long long int C
- scala - (Scala TYPE-SAFETY)仅当字符串中包含 .txt 扩展名时才将字符串作为参数,否则会编译错误吗?
- javascript - node.js 中的 Haste 模块映射是什么?
- javafx - 可以打开fontawesomefx-glyphsbrowser-windows批处理文件
- c - 调整代码以复制/粘贴 .zip 和 .tar.gzip 文件?
- angular - 将 ngModel 用于列的选择选项