查找3个日期中最早的日期

新手上路,请多包涵

我在 Java 中有三个日期:a、b、c。任何或所有这些日期都可以为空。在没有大量 if-else 块的情况下,确定 a、b、c 中最早日期的最有效方法是什么?

原文由 Ace 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 572
2 个回答

没有绕过 null 检查的方法,但是通过一些重构可以让它变得轻松。

创建一个安全地比较两个日期的方法:

 /**
 * 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));
}

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

Java 8+ 单线。为了安全起见,添加了空检查。传递任意数量的日期。

 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));
}

没有新方法就 不是 null 安全 的:

 Collections.min(Arrays.asList(date1, date2));

原文由 pavelety 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题