コツコツ学習ブログ

プログラマのweb上のメモ的なもの

コンパレータ(sort)

コンパレータとは

現実世界における「並び替えのルール(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);
    }

}