[英]Comparator not sorted my class with dates
I have a class with day,month. 我有一天,一个月的课。 I insert random dates and after I sorted it looks like that? 我插入随机日期,排序后看起来像这样吗? Why? 为什么?
I getting the "time" by getting it from database and i return the data as ArrayList Code: 我从数据库中获取了“时间”,然后将数据作为ArrayList代码返回:
public ArrayList<ClockModel> getDay(String workName){
try {
open();
ArrayList<ClockModel> list = new ArrayList<ClockModel>();
Cursor c = null;
c = myDb.query(TABLE_DAY, null,"workName = ?", new String[] {workName}, null, null, null);
while (c.moveToNext()) {
Clock clock = new Clock(
c.getInt(0), //id
c.getString(1),//workName
c.getInt(2), //dateDay
c.getInt(3),//dateMouth
c.getInt(4),//dateYear
);
Collections.sort(list,dateCompare);
list.add(clock);
}
return list;
} catch (Exception e) {
return null;
}finally{
close();
}
}
Comparator<ClockModel> dateCompare = new Comparator<ClockModel>() {
@Override
public int compare(ClockModel o1, ClockModel o2) {
int dd1 = o1.getDateDay();
int mm1 = o1.getDateMonth();
int dd2 = o2.getDateDay();
int mm2 = o2.getDateMonth();
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;
}
}
}
};
The compare method looks fine. 比较方法看起来不错。 Are you sure that the bug is exactly here? 您确定错误确实在这里吗? If it is yours class ClockModel, then I suggest you to double check it=) 如果它是您的ClockModel类,那么我建议您仔细检查它=)
And btw, you can simplify your code by using Integer.compare(int, int) like this: 顺便说一句,您可以通过使用Integer.compare(int,int)来简化代码,如下所示:
Comparator<ClockModel> dateCompare = new Comparator<ClockModel>() {
@Override
public int compare(ClockModel o1, ClockModel o2) {
int monthCompare = Integer.compare(o1.getDateMonth(), o2.getDateMonth());
int dayCompare = Integer.compare(o1.getDateDay(), o2.getDateDay());
return (monthCompare != 0) ? monthCompare : dayCompare;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.