を、Comparator
インターフェースはメソッドthenComparing
を持っています。このメソッドを使用して、複数のフィールドで比較するコンパレータを作成できます。
あなたは日付によって比較することがアルファベット順やその他を比較するためのコンパレータを持っている場合は、あなたが欲しいのフィールドでソートするコンパレータを組み合わせることができます。
Comparator<Project> nameComparator = ...
Comparator<Project> dateComparator = ...
あなたがあれば逆のコンパレータを使用して、コンパレータを混在させることができます必要です。これらは、いくつかの例です:
Comparator<Project> nameAndDateComparator = nameComparator.thenComparing(dateComparator);
Comparator<Project> nameAndReversedDateComparator = nameComparator.thenComparing(dateComparator.reversed());
その後、あなたはあなたのニーズにマッチするコンパレータと、ソートなどの通常の方法を使用することができます。
は、Java 8を使用していない場合、あなたはあなたのコンパレータを組み合わせるために、ユーティリティクラスを作成することができます。
public class CombinedComparator<T> implements Comparator<T> {
Comparator<T> firstComparator;
Comparator<T> secondComparator;
public CombinedComparator(Comparator<T> firstComparator, Comparator<T> secondComparator) {
this.firstComparator = firstComparator;
this.secondComparator = secondComparator;
}
@Override
public int compare(T o1, T o2) {
int result = firstComparator.compare(o1, o2);
return (result != 0) ? result : secondComparator.compare(o1, o2);
}
}
そして、あなたは複数のフィールドを作成することができますが、この方法をコンパレータ:
Comparator<Project> nameAndDateComparator = new CombinedComparator<Project>(nameComparator, dateComparator);
Comparator<Project> nameAndReversedDateComparator = new CombinedComparator<Project>(nameComparator, Collections.reverseOrder(dateComparator));
だからあなたがする必要があり降順で日付に基づいて並べ替え、日付が等しい場合は、そのサブセットで名前ソートを行う必要がありますか? – aksappy
いいですね。他の人が何を示唆しているか見てみましょう。 Apache Commons CompareToBuilderも動作します。私はそれを一度使ってきました。 – Kartic