简体   繁体   English

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

[英]how to convert following java code to java 8?

I write java code like this , 我这样写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;
    }
  }

I am trying to it convert Guava , to write single line function. 我正在尝试将Guava转换为编写单行函数。 This is ,I tried one. 这是我尝试过的。 Is it correct ? 这是正确的吗 ? I also need to it convert java 8 . 我还需要将其转换为Java 8。

return Ordering.natural().nullsLast().min(discontinueDate, actualTerminateDate);

If you want to make your code more succinct, you have other means to do so, unless you want just to show off with a one-liner. 如果您想使代码更简洁,则可以采用其他方法,除非您只想单线展示。 Here is one of the ways to approach it. 这是解决该问题的方法之一。 It's not a one-liner and it's not using any lambdas either, but it's still a valid Java 8 code and it has the same logic, but expressed in a more simple way. 它不是单行的,也没有使用任何lambda,但是它仍然是有效的Java 8代码,并且具有相同的逻辑,但是用更简单的方式表示。

DateTime getChangedDoseEndDate(final DateTime actualTerminateDate, final DateTime discontinueDate) {
  if (actualTerminateDate != null && actualTerminateDate.isBefore(discontinueDate)) {
    return actualTerminateDate;
  }
  return discontinueDate;
}

You can even use ternary operator and fit it in a one-liner (and it's still a valid Java 8 code). 您甚至可以使用三元运算符并将其适合于单行(它仍然是有效的Java 8代码)。

DateTime getChangedDoseEndDate(final DateTime terminateDate, final DateTime discontinueDate) {
  return terminateDate != null && terminateDate.isBefore(discontinueDate) ? terminateDate : discontinueDate;
}

However, if you can guarantee null safety, you may have something similar to Guava's code of yours (which is working perfectly, since you asked). 但是,如果可以保证null安全,那么您可能会拥有类似于Guava的代码(自从您提出要求以来,它就可以很好地工作)。

DateTime getChangedDoseEndDate(@Nonnull final DateTime actualTerminateDate, @Nonnull final DateTime discontinueDate) {
  return Stream.of(actualTerminateDate, discontinueDate).min(Comparator.naturalOrder()).get();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM