- PR -

ArrayList<Map<String, String>>のソート

投稿者投稿内容
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-11-14 12:50
よくみるとコードタグじゃなくて引用タグでコードを載せていましたね・・・orz

ソートの優先度をキーとするなら、HashMapではなく、TreeMapにすべきです。
そうすれば、かなり汎用的に作れますよ。
MapのkeySet()のイテレータでキーを優先度順に取得できるので。

サンプルはあくまで、Orphanさんのコードに合わせたレベルにしています。

引用:

Comparator#compare(Object, Object)も自分で実装する必要もないみたいですし


いや、実装していますよ。匿名クラスとして実装してます。
これはJDK5からの話ではありません。もっと前からあります。

[ メッセージ編集済み 編集者: かつのり 編集日時 2007-11-14 12:51 ]
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2007-11-14 23:20
引用:

かつのりさんの書き込み (2007-11-14 00:54) より:
引用:

Collections.sort(al, new Comparator<Map<String, String>>() {
public int compare(Map<String, String> o1, Map<String, String> o2) {
int result = o1.get("key1").compareTo(o2.get("key1"));
if (result == 0) {
return o1.get("key2").compareTo(o2.get("key2"));
}

return result;
}
});


こんな感じのComparatorを書けばよいです。
key1同士で比較して0ならば同値なので、key2の比較結果を返せば、
同一のkey1内でkey2のソートが行われます。
key1が違えばそもそもkey1でソートされます。


ご提示頂いた方法でソートできました。
かつのりさん、皆さん
ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)