创建比较器类以对ArrayList <date> </date>进行排序

时间:2014-01-14 03:20:48

标签: java sorting date arraylist

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

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

我尝试使用以下Comparator类执行此操作:

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扩展Object在接口Comparator

中声明

2)二元运算符'&gt;'的坏操作数类型:if(x&gt; y){ 第一种类型:日期第二种类型:日期

3)二元运算符'&lt;'的坏操作数类型:否则如果(x

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

干杯

4 个答案:

答案 0 :(得分:5)

如果你不是为了娱乐或为了学习而做的,如果我们真的在谈论java.util.Date并且你真的想要自然比较,那么,你或许想知道Date已经implements Comparable<Date>(请参阅its javadoc entry)。

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

只需使用Collections.sort(dateList);就可以了。这是javadoc entry for Collections#sort

答案 1 :(得分:0)

这样做

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

答案 2 :(得分:0)

你试试这个

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

答案 3 :(得分:0)

请尝试以下代码:

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对象之间的比较非常简单,只需将它们转换为long值,然后比较相应的整数。

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

DataComparator是多余的。