使用Collections.Sort并比较按日期排序的对象

时间:2015-03-01 05:10:28

标签: android sorting

我正在尝试按最早的日期排序名为dbDatas的对象列表

[请原谅我收到日期d1和d2的错综复杂的方式,这就是我的课程设置方式]

我在使用Collections.sort进行排序时发现了许多示例,但我无法判断它们是否会先在列表中排序较早的日期,或者稍后在列表中排序。问题是,d1.before(d2)给出的返回值为-1,将较早的日期放在第一位?这可能看起来很简单,但我只是找不到答案。谢谢。

   private List<dbData> sortDBDataByDate(List<dbData> dbDatas, final String columnDate) {
        Collections.sort(dbDatas,new Comparator<com.mycompany.dudesmyreminders.dbData>() {
            @Override
            public int compare(dbData lhs, dbData rhs) {
                Date d1 = Utility.getDateFromString("M d yyyy", lhs.getMappedColumnValue(columnDate));
                Date d2 = Utility.getDateFromString("M d yyyy", rhs.getMappedColumnValue(columnDate));
                if (d1.before(d2))
                    return -1;
                else if (d1.equals(d2))
                    return 0;
                else
                    return 1;
            }
        });

        return dbDatas;
    }

3 个答案:

答案 0 :(得分:2)

是的,如果d1在d2之前,那么返回-1是正确的。您可以将if / else if / else块简化为:

return d1.compareTo(d2);

假设d1和d2不为空

答案 1 :(得分:1)

是。 Collections.sort按升序排序。 “升序”的含义由您的比较方法定义。负数表示lhs出现在rhs之前,0表示相等,正数表示lhs出现在rhs之后。

这在比较器文档中有详细说明,在测试中也很明显。

顺便说一下,你也可以返回d1.compareTo(d2),因为Date已经实现了。

答案 2 :(得分:-1)

目前尚不清楚你的问题是什么。你在问你是否应该提升日期?那么答案当然取决于你的申请。您是否在询问您的代码是否按日期排序?嗯,是的,因为如果日期是&#34;之前&#34;另一个你指定它更小。如果您的问题是集合排序是否升序?然后答案是肯定的,这是有充分证据的。