Javaで整数が入ったListを数字の順でソートする

 

    List<String> list = new ArrayList<String>();
    list.add("2");
    list.add("12");
    list.add("30");
    list.add("10");
    list.add("101");

    Collections.sort(list);

というコードでは[10, 101, 12, 2, 30]の順にソートされてしまいます。

    Collections.sort(list, new java.util.Comparator<String>() {
      @Override
      public int compare(String s1, String s2) {
        int i1 = Integer.parseInt(s1);
        int i2 = Integer.parseInt(s2);
        return i2 - i1;
      }
    });

とすると、[101, 30, 12, 10, 2]と降順にソートされます。昇順にソートしたい場合はi1-i2とすればよいでしょう。

ちなみに、今月リリースされるJava8では

    Collections.sort(list, (s1, s2) -> Integer.parseInt(s2) - Integer.parseInt(s1));

というようにラムダ式を用いた書式が可能なようです。

関連:https://hacknote.jp/archives/517/
データベースから取得する際にソートして取得する方法