为了账号安全,请及时绑定邮箱和手机立即绑定

如何将以下 java 代码转换为 java 8?

如何将以下 java 代码转换为 java 8?

阿波罗的战车 2023-03-31 09:20:48
我这样写java代码, private DateTime getChangedDoseEndDate(final DateTime actualTerminateDate, final DateTime discontinueDate)  {    if (actualTerminateDate == null)    {      return discontinueDate;    }    if (discontinueDate == null)    {      return actualTerminateDate;    }    else if (actualTerminateDate.isBefore(discontinueDate))    {      return actualTerminateDate;    }    else    {      return discontinueDate;    }  }我正在尝试将其转换为 Guava 以编写单行函数。这是,我试过一个。这是对的吗 ?我还需要它转换 java 8 。return Ordering.natural().nullsLast().min(discontinueDate, actualTerminateDate);
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

如果你想让你的代码更简洁,你有其他方法可以做到,除非你只想用一行代码来炫耀。这是处理它的方法之一。它不是单行代码,也没有使用任何 lambda,但它仍然是有效的 Java 8 代码并且具有相同的逻辑,但以更简单的方式表达。


DateTime getChangedDoseEndDate(final DateTime actualTerminateDate, final DateTime discontinueDate) {

  if (actualTerminateDate != null && actualTerminateDate.isBefore(discontinueDate)) {

    return actualTerminateDate;

  }

  return discontinueDate;

}

您甚至可以使用三元运算符并将其放入单行代码中(并且它仍然是有效的 Java 8 代码)。


DateTime getChangedDoseEndDate(final DateTime terminateDate, final DateTime discontinueDate) {

  return terminateDate != null && terminateDate.isBefore(discontinueDate) ? terminateDate : discontinueDate;

}

但是,如果您可以保证空安全,您可能会拥有类似于您的 Guava 代码的东西(自您提出以来,它运行良好)。


DateTime getChangedDoseEndDate(@Nonnull final DateTime actualTerminateDate, @Nonnull final DateTime discontinueDate) {

  return Stream.of(actualTerminateDate, discontinueDate).min(Comparator.naturalOrder()).get();

}


查看完整回答
反对 回复 2023-03-31
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信