0

目前我正在尝试按日期对列表进行排序:

Collections.sort(unsortedDates, new Comparator<Item>() {
    public int compare(Item m1, Item m2) {
        return m1.getDate().compareTo(m2.getDate());
    }
});

但我希望对列表进行排序,以便锚日期为今天,第一项应该是当前日期最接近的日期。

日期格式为MM/dd.

getDate()返回一个Date对象。

4

3 回答 3

5

在比较器之外创建今天的日期,并更改您的比较器以比较它比较的日期的绝对差异,如下所示:

final long todayTime = new Date().getTime();
Collections.sort(unsortedDates, new Comparator<Item>() {
    public int compare(Item m1, Item m2) {
        long dist1 = Math.abs(todayTime-m1.getDate().getTime());
        long dist2 = Math.abs(todayTime-m2.getDate().getTime());
        return Long.compare(dist1, dist2);
    }
});
于 2013-08-18T14:40:51.033 回答
3

Java 1.5+(自动装箱)的代码。

final long current = (new Date()).getTime();
Collections.sort(unsortedDates, new Comparator<Item>() {
    public int compare(Item m1, Item m2) {
        Long m1diff = Math.abs(m1.getDate().getTime() - current);
        Long m2diff = Math.abs(m2.getDate().getTime() - current);
        return m1diff.compareTo(m2diff);
    }
});
于 2013-08-18T14:41:06.063 回答
0

这个人的答案与您的代码几乎相同。也许值得一试。

按日期对对象列表进行排序

或者你有这个,但它使用 ArrayList 所以它可能不是你要找的,但有点相似。

按日期对 ArrayList 中的对象进行排序

于 2013-08-18T14:41:35.403 回答