インスタンスの入ったListのsort方法
忘れかけていたjavaで配列を並び替えるプログラムを作ってみます。名前と身長のプロパティを持つHumanオブジェクトを適当に配列に放り込んでソートしてます。こうやって見るとjavaって簡単だと思うんだけど。
Humanクラス
名前と身長のプロパティを持つHumanクラス。ポイントはComparableインターフェースを実装していることで、compareToメソッドの実装が強制されます。compareToメソッドで並び替えの方法を定義します。渡されたオブジェクトよりも小さければ-1、等しければ0、大きければ+1を返すだけ。
public class Human implements Comparable<Human>{ private String name; private double height; public Human(String name, double height) { this.name = name; this.height = height; } public String getName() { return this.name; } public double getHeight() { return this.height; } public int compareTo(Human human) { if (this.getHeight() < human.getHeight()) { return -1; } else if (this.getHeight() > human.getHeight()) { return 1; } else { return 0; } } }
並び替えを実行する処理を書きました。めんどいのでmainだけ(笑)
Collectionsクラスのsortを呼び出すだけで並び替えられます。
public static void main(String[] args) { List<Human> array = new ArrayList(); array.add(new Human("one", 168)); array.add(new Human("two", 170)); array.add(new Human("three", 148)); array.add(new Human("four",170)); array.add(new Human("five",169)); Collections.sort(array); for(Human human : array){ System.out.printf("%-10s:%f\n", human.getName(),human.getHeight()); } }
昇順にsortされました。もし、身長でなく名前で並び替えを行いたければcompareToを変更することになるのですが、Comparatorインターフェースを実装したクラスを別に作ることで、実クラスに変更を加えることなく並び替えを実装することが可能です。どちらが良いかは状況次第で。 three :148.000000 one :168.000000 five :169.000000 two :170.000000 four :170.000000