ファイル名は、コレクションを使用して、タイムスタンプが含まれますファイルのリストをソートすることができません(Javaの)

ドックヤード:

私は名前を実際にタイムスタンプされているファイルの一覧が含まれているのArrayListを持っています。

List<File> fileList = new ArrayList<>();
fileList.add(new File("20190612221053"));
fileList.add(new File("20190512221303"));
fileList.add(new File("20190612221353"));
fileList.add(new File("20190512222303"));
fileList.add(new File("20190612221303"));

タイムスタンプの形式は、「yyyymmddHHssmm」です。

私の目標は、ファイル名に与えられたタイムスタンプの昇順に、このリストをソートすることです。

したがって、私は以下のようにCollections.sortメソッドを使用しています:

Collections.sort(fileList, new Comparator<File>() {
    @Override
    public int compare(File file1, File file2) {
        Date timeStamp1=null,timeStamp2=null;
        try {
            timeStamp1 = new SimpleDateFormat("yyyymmddHHssmm").parse(file1.getName());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        try {
            timeStamp2 = new SimpleDateFormat("yyyymmddHHssmm").parse(file2.getName());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if(timeStamp1!=null && timeStamp2!=null && timeStamp1.getTime()!=timeStamp2.getTime() ) {
            return (timeStamp1.getTime() > timeStamp2.getTime()) ? 1 : -1;
        }
        else {
            return 0;
        }
    }
});

明らかに、この行の後、あなたは順序であるリスト項目(ファイル)を期待します:

[20190512221303, 20190512222303, 20190612221053, 20190612221303, 20190612221353]

しかし、その代わりに、私は順序を取得しています:

[20190512221303, 20190612221303, 20190512222303, 20190612221053, 20190612221353]

明らかに何かが間違って起こっています。私は間違ったことをやっているところに誰かが指摘してくださいすることができます。

Jigar Joshi :

コード内の主要な2つのバグがあります。

  1. 比較ロジック

使用する

Long.compare(timeStamp1.getTime(), timeStamp2.getTime());

2つの適切な比較行うにlong番号を

  1. 日付パターン

スイッチmm- > MM月の。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=228282&siteId=1