想要比较Java.time.LocalDate& compareTo()中的java.time.LocalTime

时间:2014-11-12 18:55:03

标签: java compareto java-time

我有一个实现Meeting的{​​{1}}类。重写Comparable<Meeting>方法会首先比较两个compareTo个对象的meetingDate,如果它们相等,则会比较它们的Meeting。我想将所有meetingTime个对象放在Meeting中,以便我可以根据ProirtiyQueue<Meeting>meetingDate检索即将举行的会议。使用的数据类型分别是java.time.LocalDate和java.time.LocalTime。如何在meetingTime方法中比较meetingDatemeetingTime

compareTo(Meeting o)

2 个答案:

答案 0 :(得分:2)

您可以将compareTo的实施委托给Comparator,它可以对给定会议的多个属性进行链接比较:

public class Meeting {
    ...

    private static final Comparator<Meeting> comparator =
        Comparator.comparing(Meeting::getMeetingDate)
            .thenComparing(Meeting::getMeetingTime);

    @Override
    public int compareTo(Meeting that) {
        comparator.compare(this, that);
    }

答案 1 :(得分:1)

根据文档,

<强> Date.compareTo()

  

返回:一个int&lt;如果此Date小于指定的Date,则为0;如果它们相等则为0,并且int>如果此日期更大,则为0。

<强> Time.before()

  

如果此时间小于给定时间,则为

然后你需要这样的东西:

public int compareTo(Meeting o) {
    if (o == null)
      return (0);
    if (o.meetingDate.compareTo(meetingDate) == 0)
      return (o.meetingTime.before(meetingTime));
    else
      return (o.meetingDate.compareTo(meetingDate));
}

此功能将返回: &#34;一个int&lt; 0&#34;如果o在currentMeeting对象之前。 &#34;一个int&gt; 0&#34;如果o在currentMeeting对象之后。