- - PR -
ソート処理について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-09-18 16:51
お聞きしたいことがあります。
class bean{ String name; String a; String b; String c; } List<bean> list = new ArrayList<bean>; このようなlistがあるとします。 このリストの各beanでNAMEが一致する場合 a(昇順),b(昇順),c(昇順)でソートし そのソートした最初のbeanだけを 新たに用意した変数に入れ替えるという プログラムはどのように書けばいいでしょうか? SortedSet set = new TreeSet(Comparator comparator)など Comparatorを使用してうまくできないかやっていますが まったくできません。 アドバイスいただけないでしょうか。 よろしくお願いします |
|
投稿日時: 2006-09-18 17:29
Collections.sort()
|
|
投稿日時: 2006-09-18 18:30
日本語が微妙にわかりにくい…
1.まず「ORDER BY name, a, b, c」の条件でbeanを比較するComparatorを自前で 実装して、Collections.Sort()でソートする。 2.ソート済みのlistを走査し、直前の要素と異なるnameを持つbeanを 検出して、「新たに用意した変数」とやらに入れてやる。 うーん、エレガントさに欠ける気がするけど、こんなところかな。 |
|
投稿日時: 2006-09-18 21:12
すみません。ありがとうございます。
ソートと重複を削除を一度に行わず。 分けて考えたいと思います。 |
|
投稿日時: 2006-09-18 21:23
TreeSetは全く関係ない話で、
Comparatorの実装がマズイと思うのですが、 上手くいかないと仰るComparatorの実装のコードを 載せてみてはいかがでしょうか。 |
|
投稿日時: 2006-09-18 21:31
私なら
1.a,b,cでbeanを比較するComparatorを実装 2.beanのname重複判定用Mapと入れ替え候補用Mapをkeyにbeanのname、valueにbeanとして作成 3.Listの先頭からbeanに対して4-5の処理を繰り返す 4.各beanを重複判定用Map#containsKeyでnameが重複しているか判断 重複していれば5へ 重複していなければ重複判定用Mapにbeanを格納(次のbeanの判定に移動) 5.重複判定用Mapのbeanと現在処理しているbeanを1で実装したComparatorで比較 重複判定用Mapのbeanが比較上先であれば、入れ替え候補用Mapのvalueを重複判定用Mapのbeanで更新 現在処理しているbeanが比較上先であれば、重複判定用Mapと入れ替え候補用Mapのvalueを現在処理しているbeanで更新 最終的に入れ替え候補用Map#valuesで得られたものが 最初に用意されたList中にnameが一致するものが存在し、且つa,b,cで比較された最初のbeanのコレクション としますかね >そのソートした最初のbeanだけを >新たに用意した変数に入れ替えるという これの内容によってはMapが1つで済むんですが・・ |
1