我的申请表我想对“MyDate”课程进行排序,老师告诉我如何排序,但我怎样才能比较年份,然后是其他人呢?
Comparator<MyDate > dateCompare = new Comparator<MyDate >() {
@Override
public int compare(MyDate o1, MyDate o2) {
int dd1 = o1.getDateDay();
int mm1 = o1.getDateMonth();
//////years to compare ???????????????????
int years1 = o1.getYear();
int dd2 = o2.getDateDay();
int mm2 = o2.getDateMonth();
//////years to compare ?????????????????
int years2 = o2.getYear();
if (mm1 > mm2) {
return 1;
} else if (mm1 < mm2) {
return -1;
} else { // ==
if (dd1 > dd2) {
return 1;
} else if (dd1 < dd2) {
return -1;
} else {
return 0;
}
}
}
};
Collections.sort(list,dateCompare);
答案 0 :(得分:0)
首先比较最重要的字段。使用Date
year
。
此外,自else
和if
条件else if
起,不需要跟踪return
。像
if (years1 > years2) {
return 1;
} else if (years1 < years2) {
return -1;
}
if (mm1 > mm2) {
return 1;
} else if (mm1 < mm2) {
return -1;
}
if (dd1 > dd2) {
return 1;
} else if (dd1 < dd2) {
return -1;
}
return 0;
答案 1 :(得分:0)
您可以使用before()
对象的Date
方法来比较日期,这样可以非常简单地为您的任务编写代码。当然,这意味着您必须将MyDate
个对象转换为Date
,但它应该非常简单。
答案 2 :(得分:0)
您可以使用GregorianCalendar
类的内置功能在一行中执行此操作。
return new GregorianCalendar(years1, mm1 - 1, dd1).compareTo(new GregorianCalendar(years2, mm2 - 1, dd2));
请注意,月份参数中的- 1
是必需的,因为GregorianCalendar
构造函数使用0
到11
范围内的月份值。