想要比较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的类了。