FC2ブログ
HOME   »  スポンサー広告  »  スポンサーサイト   »  Java  »  [Java]クラスのListを任意の条件でソートする

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Java]クラスのListを任意の条件でソートする

クラスのListを任意の条件でソートしたい時の方法。

ListのソートはCollectionsクラスのsortメソッドで可能だが、Comparator<T>インタフェースを実装したクラスを作成し、2つの引数を取るsortメソッドの第2引数にこの自作クラスのインスタンスを渡してやることにより、任意の条件でのソートが可能となる。
ソート条件は、自作クラスのcompareメソッドで実装する。

例えば以下の様なHogeクラスがある。
public class Hoge {
    public int index;
    public int value;

    public void method() {
        ごにょごにょ(methodメソッドで行う処理)
    }
}
このHogeクラスのListを、

・indexフィールドの値での昇順
・indexフィールドの値が等しい場合はvalueフィールドの値での降順

という条件でソートしたい。

まず、Comparator<T>インタフェース(Tはソート対象となるHoge)を実装したHogeComparatorクラスを作成する。
public class HogeComparator implements Comparator<Hoge> {
    @Override
    public int compare(Hoge o1, Hoge o2) {
        Integer index_1 = new Integer(o1.index);
        Integer index_2 = new Integer(o2.index);
        Integer value_1 = new Integer(o1.value);
        Integer value_2 = new Integer(o2.value);
        int result;
        result = index_1.compareTo(index_2);
        if (result == 0) {
            result = value_2.compareTo(value_1);
        }
        return result;
    }
}
まず10行目で、2つのHogeクラスのindexフィールド値を比較する。
compareToメソッドは引数の方が小さい場合は正の値、大きい場合は負の値、等しい場合は0を返す。
この自作クラスのcompareメソッドの戻り値が正の値の場合はo2→o1の順、負の値の場合はo1→o2の順にソートされるので、index_1 > index_2の場合はo2→o1の順、index_1 < index_2の場合はo1→o2の順、つまり昇順でソートされる。

index_1 = index_2の場合(12行目が真の場合)は、今度は13行目でvalueフィールド値を比較する。
value_1 > value_2の場合はcompareメソッドの戻り値が負の値になるのでo1→o2の順、value_1 < value_2の場合はcompareメソッドの戻り値が正の値になるのでo2→o1の順、つまり降順でソートされる。

以上の自作クラスを以下の様に使用すれば、希望の条件でソートすることができる。
List<Hoge> hoges = new ArrayList<Hoge>();
HogeComparator comparator = new HogeComparator();
ごにょごにょ(hogesに要素を格納する処理その他)
Collections.sort(hoges, comparator);


関連記事
Comment
Trackback
Trackback URL
Comment Form
管理者にだけ表示を許可する
プロフィール

まさお

Author:まさお
プログラミングは趣味レベルなので、お手柔らかに。

ブログランキング
ブログランキング参加中。是非クリックお願いします。


にほんブログ村 IT技術ブログ Androidアプリ開発へ

人気ブログランキングへ

ブログランキング



ブログ王

ブログランキング【ブログの惑星】

プログラム人気ブログランキング
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。