在3个日期中查找最早的日期
我在Java中有三个日期:a,b,c。这些日期中的任何一个或全部都可能为空。在没有大量 if-else 块的情况下确定 a,b,c 中最早日期的最有效方法是什么?
我在Java中有三个日期:a,b,c。这些日期中的任何一个或全部都可能为空。在没有大量 if-else 块的情况下确定 a,b,c 中最早日期的最有效方法是什么?
没有绕过空检查,但是通过一些重构,你可以使它变得无痛。
创建一个安全比较两个日期的方法:
/**
* Safely compare two dates, null being considered "greater" than a Date
* @return the earliest of the two
*/
public static Date least(Date a, Date b) {
return a == null ? b : (b == null ? a : (a.before(b) ? a : b));
}
然后合并对该调用:
Date earliest = least(least(a, b), c);
实际上,您可以将其作为任何的泛型方法:Comparable
public static <T extends Comparable<T>> T least(T a, T b) {
return a == null ? b : (b == null ? a : (a.compareTo(b) < 0 ? a : b));
}
Java 8+ oneliner.为确保安全,添加了空检查。传递任意数量的日期。
public static Date min(Date... dates) {
return Arrays.stream(dates).filter(Objects::nonNull).min(Date::compareTo).orElse(null);
}
不是空安全,但更短:
public static Date min(Date... dates) {
return Collections.min(Arrays.asList(dates));
}
没有新方法,则不为空安全:
Collections.min(Arrays.asList(date1, date2));