コンパレータとは
現実世界における「並び替えのルール(2つのインスタンスに関する大小の比較方法)」を クラスとして表現したもの java.util.Comparatorインタフェースを実装しCompareTo()をオーバーライドして定義する
//Main.java import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Account> list = new ArrayList<>(); Account a1 = new Account(); Account a2 = new Account(); Account a3 = new Account(); a1.number = 200; a2.number = 100; a3.number = 300; a1.zandaka = 1000000; a2.zandaka = 500000; a3.zandaka = 100000; list.add(a1); list.add(a2); list.add(a3); System.out.println("ソート前: "); for (Account a : list) { System.out.println(a.number); } //自然順序で並び替え Collections.sort(list); System.out.println("自然順序ソート後: "); for (Account account : list) { System.out.println(account.number); } //残高順で並び替え Collections.sort(list, new ZandakaComparator()); System.out.println("残高順ソート後: "); for (Account account : list) { System.out.println(account.zandaka); } } }
//Account.java public class Account implements Comparable<Account> { int number; int zandaka; @Override public int compareTo(Account o) { if (this.number < o.number) { return -1; } if (this.number > o.number) { return 1; } return 0; } }
//ZandakaComparator.java import java.util.Comparator; public class ZandakaComparator implements Comparator<Account> { public int compare(Account x, Account y) { return (x.zandaka - y.zandaka); } }