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
難易度
初級
JDKサポート
Comparatorファクトリとフルエントな順序付け
利用可能
JDK 8(2014年3月)以降、利用可能
仕組み
Comparatorファクトリは順序付けを宣言的に表現し、手書きの分岐を使わずに第1キーと第2キーを組み合わせられます。
関連ドキュメント
証明