我这样写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);
答案 0 :(得分:1)
如果您想使代码更简洁,那么您还有其他方法可以这样做,除非您只想单线展示。这是解决该问题的方法之一。它不是单行的,也没有使用任何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;
}
但是,如果您可以保证null安全,那么您可能会拥有类似于Guava的代码(自从您提出要求以来,它就可以很好地工作)。
DateTime getChangedDoseEndDate(@Nonnull final DateTime actualTerminateDate, @Nonnull final DateTime discontinueDate) {
return Stream.of(actualTerminateDate, discontinueDate).min(Comparator.naturalOrder()).get();
}