そーと
Scala、Java、PHPでソースコードの量を比較してみる
なんかJavaを不当に長く書いてる気がします。
Stringは昇順のコンペア機能持ってるのでこれを逆順にするだけで解決します。通常ソートは複数の値を基にしたりList内の位置とかを考慮することも珍しくなくて、それらを実装しようとするとどの言語でもロジック書かないといけないのであんま変わらなくなると思いますけど。
ということで、リンク先の書き方なら普通は以下のように書くはずです。
public static void main(String[] args) { String yearMonths[] = { "2009-11", "2009-01", "2010-01", "2010-12", "2010-01", "2010-04", "2010-01", "2010-12", "2010-12", "2010-04"}; TreeMap<String, Integer> countsSort = new TreeMap<String, Integer>(Collections.reverseOrder()); for (String yearMonth : yearMonths) { if (countsSort.get(yearMonth) == null) { countsSort.put(yearMonth, 1); } else { countsSort.put(yearMonth, countsSort.get(yearMonth) + 1); } } System.out.println(countsSort); }
11行ってところですね。
putとgetを1箇所にまとめて短くするなら以下のようにして2行短くなって9行ってところですね。
Integer year = countsSort.get(yearMonth); year = (year == null)?1:year+1; countsSort.put(yearMonth , year);
自分は入出力をまとめるほうが好きです。