简体   繁体   English

比较器未按日期对我的班级进行排序

[英]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? 为什么?

  • 1/9 1/9
  • 2/9 2/9
  • 3/9 3/9
  • 7/9 7/9
  • 9/9 9/9
  • 10/9 10/9
  • 5/9 5/9
  • 11/9 11/9

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM