データベースを使っている限り、基本的に「order by」に任せるのが固いし、楽なのですが・・、さらに加工したりとかでJavaで並べ替えをしたい場合があります。
今回は、自作したクラスの配列に対して、ソートをしてみます。
自作クラスの配列をソートするサンプル
自作したクラスSortItemの配列を、自作クラス内のフィールド変数(名称)でソートしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import java.util.Arrays; public class SortTest { public static void main(String[] args) { SortItem[] targetArray = new SortItem[] { new SortItem("001","メロン"), new SortItem("002","すいか"), new SortItem("003","りんご"), new SortItem("004","バナナ"), new SortItem("005","みかん") }; System.out.println("-- ソート前 --"); print(targetArray); Arrays.sort(targetArray); System.out.println("-- ソート後 --"); print(targetArray); } private static void print(SortItem[] targetArray) { for(SortItem item : targetArray) { System.out.println(item.toString()); } } } class SortItem implements Comparable { private String id = null; private String name = null; public SortItem(String id,String name){ this.id = id; this.name = name; } @Override public int compareTo(SortItem arg) { return name.compareTo(arg.name); } @Override public String toString() { return "id:" + id + " name:" + name ; } } |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 | -- ソート前 -- id:001 name:メロン id:002 name:すいか id:003 name:りんご id:004 name:バナナ id:005 name:みかん -- ソート後 -- id:002 name:すいか id:005 name:みかん id:003 name:りんご id:004 name:バナナ id:001 name:メロン |
ひらがな、カタカナのそれぞれ昇順ですが、サンプルってことで。
(すみません、手抜きで)
サンプルの解説
Arrays#sort(Object[])にて、自作クラスの配列をソートすることができます。
どのようにソートするか?は、Comparable#compareTo(Object)を実装することで、APIに評価方法を教えてあげます。
サンプルでは、Stringクラスの評価にお任せしてみましたw
また、降順でソートしたい場合は、以下のように第二引数に追加指定することで簡単にできます。
1 | Arrays.sort(targetArray,Collections.reverseOrder()); |