创建比较器类以对数组列表<Date>进行排序



我正在尝试对 ArrayList 对象中的日期进行排序。为此,我正在使用排序,其中日期列表是我的 ArrayList 对象:

Collections.sort(dateList, new DateComparator());

我尝试使用以下比较器类来执行此操作:

class DateComparator implements Comparator {
    int compare(Object a, Object b) {
        Date x = (Date) a;
        Date y = (Date) b;
        if (x > y) {
            return 1;}
        else if (x == y) {
            return 0;}
        else if (x < y) {
            return 1;
        }
    }
}

但是,这给了我以下错误:

1)无法实现比较(T,T) - 尝试分配较弱的访问权限;是公共的,其中 T 扩展对象在接口比较器中声明

2) 二进制运算符 '>' 的错误操作数类型:if (x>y) {第一种类型:日期 第二种类型:日期

3) 二进制运算符 '<' 的错误操作数类型:否则如果 (x

关于出了什么问题的任何想法?

干杯

如果你这样做

不仅仅是为了好玩或为了学习,如果我们实际上是在谈论java.util.Date并且你真的想要一个自然的比较,那么,你可能想知道Date已经implements Comparable<Date>了(参见它的javadoc条目)。

这意味着,如果您不指定任何Comparator...您将有预期的行为:)

只要用Collections.sort(dateList);,你就好了。这是 Collections#sort 的 javadoc 条目。

像这样做

class DateComparator implements Comparator<Date> {
    @Override
    public int compare(Date o1, Date o2) {
        return o1.compareTo(o2);
    }  
}

你试试这个

if(date1.compareTo(date2)>0) System.out.println("Date1 is after Date2"); else if(date1.compareTo(date2)<0) System.out.println("Date1 is before Date2"); else if(date1.compareTo(date2)==0) System.out.println("Date1 is equal to Date2"); `

尝试以下代码:

import java.util.Comparator;
import java.util.Date;
public class DateComparator implements Comparator<Date>{
    @Override
    public int compare(Date o1, Date o2) {
        long t1 = o1.getTime();
        long t2 = o2.getTime();
        if(t1 < t2) {
            return -1; 
        } else if(t2 > t2) {
            return 1;
        }
        return 0;
    }
}

Date对象之间的比较非常简单,只需将它们转换为长整型值,然后比较相应的整数即可。

更重要的是,java.util.Date实现了java.lang.Comparable 本身。所以date1.compareTo(date2)将返回你想要的值。

数据比较器是冗余的。

最新更新