使用正则表达式对字符串的ArrayList进行排序

min*_*pop 3 java sorting string arraylist

我有一个StringList的String值(它们需要格式化),我需要按年排序.该列表如下:

01-05-2011
11-24-2011
01-12-2012
...
Run Code Online (Sandbox Code Playgroud)

我目前按月按字母顺序排序,但我想知道如何按年份排序这个字符串ArrayList.

Mik*_*uel 7

Collections.sort(
    myList, new Comparator<String>() {
      @Override
      public int compare(String a, String b) {
        // If a is "11-24-2012", then aLastDash points
        // here ---------^.
        int aLastDash = a.lastIndexOf("-");
        int bLastDash = b.lastIndexOf("-");
        return a.substring(aLastDash+1).compareTo(
               b.substring(bLastDash+1));
      }
    });
Run Code Online (Sandbox Code Playgroud)

Collections.sort采用a Comparator指定如何比较两个列表值.您的案例中String的列表值是s.您可以按字典顺序比较每个字符串的最后4位数字,然后就完成了.

Collections.sort稳定的,因此如果您的字符串已经按月排序,并且您按年份排序,则具有相同年份的字符串组仍将按月排序.

理想情况下,您应该将列表转换为字符串以外的其他内容列表,例如,Joda时间日期.现在这个代码是字符串输入的.您越早接受输入并将其强制转换为有意义的对象,您的代码越少,输入假设就越少,当您的假设不完全保留时,您需要调试的代码行越少.