【Java】Comparableインターフェースを実装してListの要素をソートする
自作のオブジェクトクラスを要素にもつListを並べ替える際、
 Comparableインターフェースを実装して順序を定義する方法をメモ。
Comparableインターフェースを実装する
自作のオブジェクトクラスPersonクラス
public class Person implements Comparable<Person>  {
	private Integer id;
	private String name;
	private Integer age;
	public Person(Integer id, String name, Integer age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public int getAge() {
		return this.age;
	}
	public int getId() {
		return this.id;
	}
	public String getName() {
		return this.name;
	}
	@Override
	public String toString() {
		return "id=" + id + ", name=" + name + ", age=" + age;
	}
	//順序を定義
	@Override
	public int compareTo(Person other) {
		return Integer.compare(this.age, other.getAge());
	}
}Comparableインターフェースを実装し、compareToメソッドをオーバーライド実装する。
 (Comparableインターフェースの型引数<>は同じPerson型にする)
数値型(Integer)型変数で並び替える
Personクラスの数値型メンバー変数ageを対象に、
 Integerクラスのcompareメソッドで順序比較する。
 (比較するオブジェクトをotherとしている)
Mainクラス
Collectionsクラスのsortメソッドの引数に
 Person型のオブジェクトを追加した変数personsを渡してソートする。
public class Main {
	public static void main(String[] args) {
		ArrayList<Person> persons = new ArrayList<>();
		persons.add(new Person(3,"Zack",32));
		persons.add(new Person(2,"Andy", 40));
		persons.add(new Person(1, "Dave", 25));
		persons.add(new Person(4, "Beck", 17));
		System.out.println("ソート無し:" + persons);
		Collections.sort(persons);
		System.out.println("ageでソート:" + persons);
	}
}実行結果(コンソールに出力):
ソート無し:[id=3, name=Zack, age=32, id=2, name=Andy, age=40, id=1, name=Dave, age=25, id=4, name=Beck, age=17]
 ageでソート:[id=4, name=Beck, age=17, id=1, name=Dave, age=25, id=3, name=Zack, age=32, id=2, name=Andy, age=40]
文字列(String)型変数で並び替える
Personクラスのメンバー変数、nameの値で並びを定義する。
StringクラスのcompareToメソッドで変数nameの文字列順序を比較する。
オーバーライドするcompareToメソッドの実装
public class Person implements Comparable<Person>  {
	private Integer id;
	private String name;
	private Integer age;
        //中略
	//順序を定義
	@Override
	public int compareTo(Person other) {
		return this.name.compareTo(other.getName());
	}
}public class Main {
	public static void main(String[] args) {
		ArrayList<Person> persons = new ArrayList<>();
		persons.add(new Person(3,"Zack",32));
		persons.add(new Person(2,"Andy", 40));
		persons.add(new Person(1, "Dave", 25));
		persons.add(new Person(4, "Beck", 17));
		System.out.println("ソート無し:" + persons);
		Collections.sort(persons);
		System.out.println("nameでソート:" + persons);
	}
}実行結果(コンソールに出力):
ソート無し:[id=3, name=Zack, age=32, id=2, name=Andy, age=40, id=1, name=Dave, age=25, id=4, name=Beck, age=17]
 nameでソート:[id=2, name=Andy, age=40, id=4, name=Beck, age=17, id=1, name=Dave, age=25, id=3, name=Zack, age=32]



