使用compareTo表示年,月和日.. Java

时间:2017-03-20 12:00:22

标签: java date-comparison

我想在屏幕上对日期进行排序,但问题是,当我使用compareTo方法时,我只能将其与其中一个Date属性一起使用:年,月或日......不是全部。这是一个自定义类,而不是java.util.Date类。

我需要使用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;
}

2 个答案:

答案 0 :(得分:3)

如果年份相等,您应该只比较几个月。同样,您只应比较月份相等的天数。

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();
    }
}

请注意,如果对于给定属性,两个日期的值不相等,则可以返回这些值的差异,而不是检查它是正还是负,然后返回1或-1。 compareTo不需要返回1,0或-1。它可以返回任何int值。

答案 1 :(得分:3)

Java 8减轻了一些样板,用于按Comparator.comparing的特定字段进行排序。

dateList.sort(Comparator.comparing(Date::getYear)
                  .thenComparing(Date::getMonth)
                  .thenComparing(Date::getDay));