java - 使用 Comparable 接口(interface)对日期进行排序

标签 java

我正在尝试编写一个简单的程序,通过从最早的日期到最晚的日期排序,对给定日期的顺序进行排序。

我可以按年份对日期进行排序,但是当两个日期具有相同的年份并且我需要按月份排序时,它就开始出现问题。我一直在尝试嵌套 if 语句并尝试实现 while 循环,但我似乎不太正确。我知道在我的 if 语句中,我缺少某种告诉 java 按 month < other.month 排序的语句。和day < other.day但我不太明白...

当前输入/输出:

[10/5 1999, 19/5 1999, 10/3 1999, 19/3 1999, 10/5 2000, 19/5 2000, 10/3 2000, 19/3 2000]

[10/3 1999, 10/3 2000, 19/3 1999, 10/5 1999, 10/5 2000, 19/5 1999, 19/3 2000, 19/5 2000]

class Date implements Comparable<Date> {
    private int year;
    private int month;
    private int day;

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    @Override
    public int compareTo(Date other) {
        if(year < other.year) {
            return Integer.compare(this.year, other.year);
        }
        if(year == other.year) {
            return Integer.compare(this.month, other.month);
        }
        if(month == other.month) {
            return Integer.compare(this.day, other.day);
        }
        return day;
    }

    public String toString() {
        return day + "/" + month + " " + year;
    }
}

最佳答案

多年来您都没有检查所有案例,year < other.year应该是year != other.year除此之外还有一些其他问题。你想做的是:

if years aren't same
 return sort by year
else, if months aren't same
 return sort by months
else
 return sort by days

关于java - 使用 Comparable 接口(interface)对日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53599836/

相关文章:

java - 工具栏没有任何响应

java - 当名称与参数变量相同时调用实例变量

java - Lucene 的 MultiSearcher 与 IndexSearcher 与 MultiReader

java - android studio 中旋转器的确切数据类型是什么?

java - 如何打印 mahout lda cvb 主题

java - 子类插入到父类(super class)表中

java - 如何在不阻塞的情况下从嵌套的 CompletableFuture 返回值?

java - 在实现接口(interface)的类上强制单例模式

java - 为特定 URL 添加密码保护

java - 安卓错误: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference