将 compareTo 用于年月日.. Java
Use compareTo for year,month and day.. Java
我想在屏幕上对日期进行排序,但问题是,当我使用 compareTo
方法时,我只能将它与日期属性之一一起使用:年、月或日.. 不是全部他们中的。这是自定义 class,不是 java.util.Date
class.
我需要用compareTo
的方法在屏幕上整理出来。
这就是我所做的。
public int compareTo(Date date) {
if(getYear()-date.getYear()>0 && getMonth()-date.getMonth()>0){
return 1;
}
if(getYear()-date.getYear()<0 && getMonth()-date.getMonth()<0 ){
return -1;
}
return 0;
}
如果年份相等,您应该只比较月份。同样,如果月份相等,您应该只比较天数。
public int compareTo(Date date) {
if(getYear() == date.getYear()) {
if (getMonth() == date.getMonth()) {
return getDay() - date.getDay ();
} else {
return getMonth() - date.getMonth ();
}
} else {
return getYear() - date.getYear();
}
}
请注意,如果对于给定的 属性 两个日期的值不相等,您可以 return 这些值的差异而不是检查它是正数还是负数然后 returning 1 或 -1。 compareTo
不需要 return 1、0 或 -1。它可以 return 任何 int 值。
Java 8 使用 Comparator.comparing
.
减轻了按特定字段排序的一些样板
dateList.sort(Comparator.comparing(Date::getYear)
.thenComparing(Date::getMonth)
.thenComparing(Date::getDay));
我想在屏幕上对日期进行排序,但问题是,当我使用 compareTo
方法时,我只能将它与日期属性之一一起使用:年、月或日.. 不是全部他们中的。这是自定义 class,不是 java.util.Date
class.
我需要用compareTo
的方法在屏幕上整理出来。
这就是我所做的。
public int compareTo(Date date) {
if(getYear()-date.getYear()>0 && getMonth()-date.getMonth()>0){
return 1;
}
if(getYear()-date.getYear()<0 && getMonth()-date.getMonth()<0 ){
return -1;
}
return 0;
}
如果年份相等,您应该只比较月份。同样,如果月份相等,您应该只比较天数。
public int compareTo(Date date) {
if(getYear() == date.getYear()) {
if (getMonth() == date.getMonth()) {
return getDay() - date.getDay ();
} else {
return getMonth() - date.getMonth ();
}
} else {
return getYear() - date.getYear();
}
}
请注意,如果对于给定的 属性 两个日期的值不相等,您可以 return 这些值的差异而不是检查它是正数还是负数然后 returning 1 或 -1。 compareTo
不需要 return 1、0 或 -1。它可以 return 任何 int 值。
Java 8 使用 Comparator.comparing
.
dateList.sort(Comparator.comparing(Date::getYear)
.thenComparing(Date::getMonth)
.thenComparing(Date::getDay));