dポイントプレゼントキャンペーン実施中!

困っています。ご存知の方教えてください。
リスト(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つキーを指定する方法もあるのでしょうか。

簡潔にオブジェクトをソートできる方法ご存知の方いましたらご教授下さい。
お願いいたします。

A 回答 (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 …
    • good
    • 0
この回答へのお礼

まさにこれが知りたい方法でした。勉強になりました。有難う御座います。Commonsって便利ですねぇ~。勉強します

お礼日時:2009/11/21 23:54

このままじゃちょっとまずいですねー。

しょーがない。答えてみるかー。

そーですねー。自分でやるとしたら、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 …
    • good
    • 0
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!