0

commons-io、jodatime などのような一部のパッケージに、次のようなリストを渡すことができるユーティリティ クラスはありますか。

March/Invoice - 00000020 - 01.03.2013.xls
March/Invoice - 00000021 - 08.03.2013.xls
April/Invoice - 00000025 - 05.04.2013.xls
January/Invoice - 00000015 - 25.01.2013.xls

次のように月ごとに並べ替えられたパスを取得します。

January/Invoice - 00000015 - 25.01.2013.xls
March/Invoice - 00000020 - 01.03.2013.xls
March/Invoice - 00000021 - 08.03.2013.xls
April/Invoice - 00000025 - 05.04.2013.xls

おそらく自分で書くこともできますがComparator、このようなものがすでにサードパーティのライブラリに存在することを望んでいましたか?

4

1 に答える 1

1

このようなものは、サードパーティのライブラリを検索するよりも優れていると思います:

final Map<String, Integer> monthMap = new LinkedHashMap<String, Integer>();
// Initialize it with all the months and corresponding index like:
// (January,1), (February,2), etc...
monthMap.put("January", 1);
monthMap.put("February", 2);
monthMap.put("March", 3);
monthMap.put("April", 4);
monthMap.put("May", 5);
monthMap.put("June", 6);
monthMap.put("July", 7);
monthMap.put("August", 8);
monthMap.put("September", 9);
monthMap.put("October", 10);
monthMap.put("November", 11);
monthMap.put("December", 12);

Collections.sort(list, new Comparator<String>()
{
    @Override
    public int compare(String a, String b)
    {
        String first = a.substring(0, a.indexOf(File.separatorChar));
        String second = b.substring(0, b.indexOf(File.separatorChar));

        return monthMap.get(first).compareTo(monthMap.get(second));
    }
});

これよりも優れた解決策があると思いますが、これは単なるポインタです。

于 2013-04-15T04:34:27.740 に答える