Java数组排序日期已修改

时间:2012-09-21 23:10:54

标签: java arrays sorting

我有一个包含多个文件的目录。我想按修改后的日期对文件进行排序。

E.g。

file1.csv  (created 14:00:55)
file2.csv  (created 14:02:55)
file3.csv  (created 15:22:55)
file4.csv  (created 15:25:55)
file5.csv  (created 16:28:55)

file1与设定时间进行比较,例如13:59(file1 = 1分钟差异),file1 file2(文件2 = 2分钟差异),file2 file3(文件3 = 1小时20分钟)差异),file3file4(文件4 = 3分钟差异),file4file5(文件5 = 1小时差异)。并根据差异列出它们。该列表现在应该是:

file3.csv  (created 15:22:55)
file5.csv  (created 14:28:55)
file4.csv  (created 15:25:55)
file1.csv  (created 14:00:55)
file2.csv  (created 15:02:55)

1 个答案:

答案 0 :(得分:3)

这方面的技巧是将文件(名称和实际修改时间)封装在一起,以及用于对列表进行排序的值。即,你这样做:

  1. 按照您要计算差异的顺序(文件名或修改时间)读取文件条目
  2. 将它们加载到集合中的对象中,并计算要对其进行排序的值;将排序值设置为对象。
  3. 根据计算值
  4. 对集合进行排序

    根据您的数据,假设原始订单是文件名,开始时间是13:59:00

    Original                        Calculated
    Data                            Sort Key
    -----------------------------   ----------
    file1.csv  (created 14:00:55)      1:55
    file2.csv  (created 14:02:55)      1:00
    file3.csv  (created 15:22:55)     20:00
    file4.csv  (created 15:25:55)      5:00
    file5.csv  (created 16:28:55)      3:00
    

    按“计算的排序键”列(降序)排序可以为您提供所需的内容。

    这是Java中的一个示例(未经测试):

    class FileWithTimeOffset implements Comparable<FileWithTimeOffset>
    {
        String fileName;
        Date   creationDate;
        int    timeOffset;
        public int compareTo(FileWithTimeOffset other)
        {
            // return negative of comparison to achieve descending sort
            return -Integer.compare(this.timeOffset,other.timeOffset);
        }
    }