我正在尝试对 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)将返回你想要的值。
数据比较器是冗余的。