java - 在 Java 8 中使用Optional进行多次空值检查

标签 java datetime if-statement java-8 option-type

我想使用 Java 8 通过多个 ifelse 语句来简化下面的代码。 有没有办法使用 Java 8 的一些功能来完全摆脱它们,例如可选? 我试图在这里找到一些东西,但找不到答案。

LocalDateTime beDate = someDate;
LocalDateTime aeDate = someDate;
LocalDateTime eDate;

if (beDate == null && aeDate == null) {
    eDate = null;
}
else if (beDate != null && aeDate == null) {
    eDate = beDate;
}
else if (beDate == null && aeDate != null) {
    eDate =  aeDate;
}
else if (beDate != null && aeDate != null && 
        (beDate.isEqual(aeDate) || beDate.isBefore(aeDate))) {
    eDate = beDate;
}
else {
    eDate = aeDate;
}

最佳答案

这里的逻辑很难理解。相反,更直接地表达您的意图:

private static final Comparator<ChronoLocalDateTime<?>> EARLIEST_PRESENT = 
    Comparator.nullsLast(Comparator.naturalOrder());

LocalDateTime eDate = BinaryOperator.minBy(EARLIEST_PRESENT).apply(beDate, aeDate);

(请注意,从 ComparatorBinaryOperator 静态导入元素将使这一点更加清晰。)

关于java - 在 Java 8 中使用Optional进行多次空值检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60750119/

相关文章:

mysql - 如何将时间戳附加到 curdate() 返回的 mysql 时间?

c# - 如何获取 .NET WebAPI 调用的运行时间

c# - 日期时间和 .NET 与 SQLite

java - 通过小部件中的按钮触发事件

Java 程序在一台计算机上运行,​​但在另一台计算机上运行

php - for 循环 > if 语句 ($foo=$array[$i])

java - 为什么 totalpay 加起来不正确?

r - 为什么 if 和 else 语句不能在 R 中的不同行上

java - Android Java 对话框中触摸事件的颜色触摸区域

java - 在 Mongo 中插入 JSON