困っています。ご存知の方教えてください。
リスト(ArrayList<UserBean>)の中に、
以下の用に2つのプロパティを持つBeanオブジェクトがが複数入っています。
---------------
UserBean{
private String name;
private String no;
// setter getter は省略
}
---------------
このリストの中に入っているオブジェクトをソートしたいのですが、うまい方法が見つかりません。
また、ソートを行うにあたって2つのキーを指定してソートしたいです。
(第1優先Key = name 第2優先Key = no)
keyが1つのソートであれば、jakarta commonsのクラスを利用して、このように
(Collections.sort( list , new BeanComparator("name"));) ソートできたのですが、
ソートキー2つとなると手が止まってしまいました・・・。
commonsのクラスで2つキーを指定する方法もあるのでしょうか。
簡潔にオブジェクトをソートできる方法ご存知の方いましたらご教授下さい。
お願いいたします。
No.3ベストアンサー
- 回答日時:
commons-collection を使うなら、
ComparatorChain が使えます。
ComparatorChain comparator = new ComparatorChain();
comparator.add( new BeanComparator("name") );
comparator.add( new BeanComparator("no") );
Collections.sort( list, comoarator );
参考URL:http://commons.apache.org/collections/apidocs/or …
No.2
- 回答日時:
このままじゃちょっとまずいですねー。
しょーがない。答えてみるかー。そーですねー。自分でやるとしたら、java.util.Collectionsクラスのsort()を使いますねー。これは、引数にListを渡して、Listをソートするものですねー。
2つのキーでソートしたい場合は、java.util.Comparatorインターフェースを実装したクラスを用意しますよー。これは、compareメソッドを1つもってて、2つのオブジェクトを比較した結果を返すんですねー。
class MyComparator implements Comparator {
public int compare(Object o1,Object o2){……}
}
こんな感じですねー。このインスタンスを配列と一緒にCollections.sortに渡せば、このcompareを使って2つのオブジェクトを比較し、並べ替えてくれますねー。
なので、独自にComplaratorをimplementsしたクラスを定義して、このcompareで、2つのUserBeanにある2つのフィールドの値に応じて、どういうときにどういう値を返すか、というのを考えて実装することで、2つのキーによるソートが可能になりますよー。詳しくは、ComparatorインターフェースをJavaDocで調べてみるといいですよー。
参考:
http://allabout.co.jp/internet/java/closeup/CU20 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) excel マクロでグループ内でソートしたい。見出しが上手くいきません。 7 2022/05/22 08:31
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- Excel(エクセル) excel 行でソートすると計算式が上手くいかない。 6 2022/06/01 08:18
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) sortの優先キーについて(スプレッドシート) 1 2023/01/17 17:59
- Excel(エクセル) エクセルVBA オートフィルタでの絞り込みと並び替えについて 1 2023/07/08 13:08
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.netでメソッドからコントロ...
-
JSPでのArrayListの表示につい...
-
サーブレットコンテキストの意...
-
VB.NETでのnothing の意義について
-
servletからjspへオブジェクト...
-
Visual BasicでJavaアプレット...
-
Vba ListViewの行挿入に関して...
-
C#でのExcel操作について.(Ran...
-
エクセルVBA 画像を貼り付ける...
-
[ExcelVBA] objExcel.Sheetsの...
-
String型からlong型への変換は...
-
Excel VBA 定数にオブジェクト...
-
ピクチャーボックスに点を打つ...
-
getParameter()について
-
MessageBox.Show(Me,…の「Me」...
-
JTableで値を右寄せ表示する方法
-
ADOのOPENで実行時エラー
-
Excel 2007 <VBAでグラフの操作...
-
PrintFormを使用してのプリント
-
VBAでの[]
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
servletからjspへオブジェクト...
-
VBAでの[]
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
JSPでのArrayListの表示につい...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
Excel VBA 定数にオブジェクト...
-
Vba ListViewの行挿入に関して...
-
javaで、、、
-
Dispose()は、どんな時に使うの...
-
VB.NETでのnothing の意義について
-
getParameter()について
-
String型からlong型への変換は...
-
JTableで値を右寄せ表示する方法
-
C#で親にイベントを投げる方法
-
Javaでブラウザ判定
-
VBスクリプトでテキストファイ...
-
PrintFormを使用してのプリント
-
UTF-8のテキストファイルを開く...
おすすめ情報