DTOのソート
んな場合かというのは色々だろうけど、実際に使用したのでメモしておこう。
配列のソートというだけならば話は簡単なのだが、DTOのListをソートしたい場合の話。
これはjava.util.Collections*1を使うことで、DTOの任意の値でもってソートできる。
DTOの定義
public class Value { Value(String str1,String str2){ setStr1(str1); setStr2(str2); } String str1; String str2; public String getStr1() { return str1; } public void setStr1(String str1) { this.str1 = str1; } public String getStr2() { return str2; } public void setStr2(String str2) { this.str2 = str2; } }
実行クラス
public class test { public static void main(String[] args) { Value v1 = new Value("AAA", "999"); Value v2 = new Value("BBB", "000"); Value v3 = new Value("CCC", "555"); List<Value> values = new ArrayList<Value>(); values.add(v1); values.add(v2); values.add(v3); //str1でソート Collections.sort(values,new Comparator<Value>(){ public int compare(Value obj1, Value obj2) { return (obj1.getStr1()).compareTo(obj2.getStr1()); } }); print(values); //str1でソート Collections.sort(values,new Comparator<Value>(){ public int compare(Value obj1, Value obj2) { return (obj2.getStr1()).compareTo(obj1.getStr1()); } }); print(values); //str2でソート Collections.sort(values,new Comparator<Value>(){ public int compare(Value obj1, Value obj2) { return (obj1.getStr2()).compareTo(obj2.getStr2()); } }); print(values); //str2でソート Collections.sort(values,new Comparator<Value>(){ public int compare(Value obj1, Value obj2) { return (obj2.getStr2()).compareTo(obj1.getStr2()); } }); print(values); } private static void print(List<Value> values){ System.out.println("----------------------"); for(Value v : values){ System.out.println(v.getStr1()+","+v.getStr2()); } System.out.println("----------------------"); } }
実行結果
---------------------- AAA,999 BBB,000 CCC,555 ---------------------- ---------------------- CCC,555 BBB,000 AAA,999 ---------------------- ---------------------- BBB,000 CCC,555 AAA,999 ---------------------- ---------------------- AAA,999 CCC,555 BBB,000 ----------------------
とまぁ昇順・降順も任意に制御できるということらしい。
java.util.Collectionsには他にもいろいろと便利な機能がありそうだ*2。