Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当第一个日期是今天时,按日期对列表排序_Java - Fatal编程技术网

Java 当第一个日期是今天时,按日期对列表排序

Java 当第一个日期是今天时,按日期对列表排序,java,Java,目前我正在尝试按日期对列表排序: Collections.sort(unsortedDates, new Comparator<Item>() { public int compare(Item m1, Item m2) { return m1.getDate().compareTo(m2.getDate()); } }); 但是我想对列表进行排序,以便锚定日期是今天,第一项应该是当前日期的最近日期 日期格式为MM/dd getDate返回一个日期对

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

Collections.sort(unsortedDates, new Comparator<Item>() {
    public int compare(Item m1, Item m2) {
        return m1.getDate().compareTo(m2.getDate());
    }
});
但是我想对列表进行排序,以便锚定日期是今天,第一项应该是当前日期的最近日期

日期格式为MM/dd


getDate返回一个日期对象。

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

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);
    }
});

Java1.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);
    }
});

这家伙的答案和你的密码差不多。也许值得一看

或者你有这个,但是它使用了一个ArrayList,所以它可能不是你想要的,但是有点类似


什么类型的日期?一根绳子?日期对象?过去日期的预期行为是什么?过去日期应该是最晚的。它对日期进行排序,使第一个日期为12/12,最后一个日期为1/1。@user1940676在Long调用中交换dist1和dist2。比较以颠倒顺序。它仍然不是从8/18开始,但是从1/1开始,676年一定是另一年的1/1。是否要忽略年份部分?