Javaで加工したデータ(POJOクラスのListなど)を、最後に特定項目順(複数)でソートしたい場合についてのメモ。
java.util.Comparatorを実装したクラスを作り、
配列ならArrays.sort()
List等のコレクションならCollections.sort()
を用いてソートする。
java.util.Comparatorの実装のやり方で、複数項目の降順、昇順にも対応できる。
以下、サンプルプログラム。
■ソート対象オブジェクト
public class Parameter {
private String code1;
private String code2;
private String code3;
//(以下、Getter/Setter)
}
■テストComparatorクラス(code1、code2、code3の順でソート)
public class TestComparator implements Comparator<Parameter> {
public int compare(Parameter o1, Parameter o2) {
String code1_1 = o1.getCode1();
String code1_2 = o2.getCode1();
// code1.compareTo(code2);の順序を逆にすると昇順、降順を制御できる
int value = code1_1.compareTo(code1_2);
if (value == 0) {
// 第一ソート項目が同じなら第二ソート項目を比べる
String code2_1 = o1.getCode2();
String code2_2 = o2.getCode2();
value = code2_1.compareTo(code2_2);
if (value == 0) {
// 第二ソート項目も同じなら第三ソート項目も比べる
String code3_1 = o1.getCode3();
String code3_2 = o2.getCode3();
value = code3_1.compareTo(code3_2);
}
}
return value;
}
}
■実行
// ソート対象のParameterクラスのリスト
List<Parameter> paramList = new ArrayList<Parameter>();
//(任意の値のcode1、code2、code3を設定したParameterを作成し、paramListに加える)
// paramListに対してソート
Collections.sort(paramList, new TestComparator());
// ソート結果の確認
for (Parameter param : paramList) {
System.out.println(param.getCode1() + "," + param.getCode2() + "," + param.getCode3());
}
0 件のコメント:
コメントを投稿