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

想要比较Java.time.LocalDate&;compareTo()中的java.time.LocalTime,java,compareto,java-time,Java,Compareto,Java Time,我有一个Meeting类,它实现了Comparable。重写的compareTo方法将首先比较两个Meeting对象的meetingDate,如果它们相等,则将比较它们的meetingTime。我想将我所有的会议对象放入项目队列,这样我就可以根据他们的会议日期和会议时间检索即将召开的会议。使用的数据类型分别是java.time.LocalDate和java.time.LocalTime。如何在我的compareTo(会议o)方法中比较meetingDate和meetingTime public

我有一个
Meeting
类,它实现了
Comparable
。重写的
compareTo
方法将首先比较两个
Meeting
对象的
meetingDate
,如果它们相等,则将比较它们的
meetingTime
。我想将我所有的
会议
对象放入
项目队列
,这样我就可以根据他们的
会议日期
会议时间
检索即将召开的会议。使用的数据类型分别是java.time.LocalDate和java.time.LocalTime。如何在我的
compareTo(会议o)
方法中比较
meetingDate
meetingTime

 public class Meeting implements Comparable<Meeting> {

private String title;
private String desciption;
private LocalDate meetingDate;
private LocalTime meetingTime;

public Meeting(String title, String description, LocalDate meetingDate, LocalTime meetingTime) {
    this.title = title;
    this.desciption = description;
    this.meetingDate = meetingDate;
    this.meetingTime = meetingTime;

}

public String getTittle() {
    return title;
}

public void setTittle(String title) {
    this.title = title;
}

public String getDescription() {
    return desciption;
}

public void setDescription(String description) {
    this.desciption = description;
}

public LocalDate getMeetingDate() {
    return meetingDate;
}
public void setMeetingDate(LocalDate meetingDate) {
    this.meetingDate = meetingDate;
}

public LocalTime getMeetingTime() {
    return meetingTime;
}

public void setMeetingTime(LocalTime meetingTime) {
    this.meetingTime = meetingTime;
}

public int compareTo(Meeting o) {
    // comparison
}


}
公共类会议实现可比性{
私有字符串标题;
私有字符串描述;
私人本地日期会议日期;
私人本地时间会议时间;
公开会议(字符串标题、字符串描述、LocalDate meetingDate、LocalTime meetingTime){
this.title=标题;
这个。描述=描述;
this.meetingDate=会议日期;
this.meetingTime=会议时间;
}
公共字符串getittle(){
返回标题;
}
公共无效设置标题(字符串标题){
this.title=标题;
}
公共字符串getDescription(){
返回描述;
}
公共void集合描述(字符串描述){
这个。描述=描述;
}
public LocalDate getMeetingDate(){
返回会议日期;
}
public void setMeetingDate(LocalDate meetingDate){
this.meetingDate=会议日期;
}
公共LocalTime getMeetingTime(){
返回会议时间;
}
public void setMeetingTime(LocalTime meetingTime){
this.meetingTime=会议时间;
}
公共内部比较(会议o){
//比较
}
}

根据文件

日期。比较()

Return:如果该日期小于指定日期,则int<0;如果它们相等,则int>0;如果该日期大于指定日期,则int>0

Time.before()

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

然后你需要像这样的东西:

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));
}
此函数将返回: 如果o在currentMeeting对象之前,则为“int<0”。
如果o在currentMeeting对象之后,则为“int>0”。

您可以将
compareTo
的实现委托给
比较器,该比较器可以链接给定会议的多个属性比较:

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);
    }
公开课堂会议{
...
专用静态最终比较器比较器=
Comparator.comparing(会议::getMeetingDate)
.然后比较(会议::获取会议时间);
@凌驾
公共int比较(满足该要求){
比较器比较(这个,那个);
}

通常情况下,您会先比较日期,然后如果日期相同,则比较时间。(如果不相同,则返回结果。)基本上,这是一个通过两个属性进行比较的问题,这两个属性恰好是日期,然后是时间……您在实现它时有什么特别的困难吗?顺便说一句,您在setTitle/getTitle中有一个输入错误。因为我们覆盖了
compareTo()
返回类型不应该是
int
。仅限Java 8,但技巧很好。我不知道您可以这样做。这不是问题,LocalDate和LocalTime已经是仅限Java 8的类了。