Collections 初級

Comparatorファクトリとフルエントな順序付け

Comparatorファクトリメソッドを使用して、読みやすく合成可能な順序付けルールを構築する。

✕ Anonymous comparator
people.sort(new Comparator<Person>() {
    @Override
    public int compare(Person a, Person b) {
        int byName = a.name().compareTo(b.name());
        return byName != 0 ? byName : Integer.compare(a.age(), b.age());
    }
});
✓ Java 8+
people.sort(Comparator.comparing(Person::name)
        .thenComparingInt(Person::age));
このコードに問題がありますか? お知らせください。
🧩

合成可能

順序付けルールを自然に連結できます。

👁

レビューが容易

ソートキーと優先順位が明確になります。

🐛

より安全な比較

専用ヘルパーにより、誤りやすい算術演算によるComparatorを回避できます。

旧来のアプローチ
匿名Comparator
モダンなアプローチ
Comparatorファクトリ
JDKバージョン
8
難易度
初級
Comparatorファクトリとフルエントな順序付け
利用可能

JDK 8(2014年3月)以降、利用可能

Comparatorファクトリは順序付けを宣言的に表現し、手書きの分岐を使わずに第1キーと第2キーを組み合わせられます。