我正在尝试对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
关于出了什么问题的任何想法?
干杯
答案 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是多余的。