これは、コンパレータが降順でソートするときに昇順ソートを実装する方法ですか?
// Sorts the emails alphabetically by subject in ascending order.
public void sortBySubjectAscending()
{
Collections.sort(emails, Collections.reverseOrder(new Email.SubjectDescendingComparator()));
}
これは、コンパレータが降順でソートするときに昇順ソートを実装する方法ですか?
// Sorts the emails alphabetically by subject in ascending order.
public void sortBySubjectAscending()
{
Collections.sort(emails, Collections.reverseOrder(new Email.SubjectDescendingComparator()));
}
はい、そうです。降順のコンパレータを逆にすると、昇順のコンパレータになります。
それを分解するために、これはあなたがしていることです:
Comparator ascending = Collections.reverseOrder(new Email.SubjectDescendingComparator());
Collections.sort(emails, ascending);
「あのStackOverflowの男」になるリスクがあります...... :)
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#reverseOrder%28%29から
public static コンパレータ reverseOrder()
Comparable インターフェイスを実装するオブジェクトのコレクションに対して、自然順序付けの逆を強制するコンパレータを返します。(自然順序付けは、オブジェクト自体の compareTo メソッドによって課される順序付けです。)これにより、Comparable インターフェースを逆自然順序で実装するオブジェクトのコレクション (または配列) をソート (または維持) するための単純なイディオムが可能になります。
これを自分で実装する方法を考えるのは教育的です。compareTo は int を返します。必要なのは結果を反転することだけです....
はい、これは良い解決策です
個人的には、コンパレーターを静的メンバーにするので、ソートするたびに再初期化する必要がなく、電子メールでもascendingComparatorを指定できます
public class Email{
private static class SubjectDescendingComparator implements Comparable<Email>{
//...
}
private static final Comparable<Email> subjectDescendingComparator =new SubjectDescendingComparator();
private static final Comparable<Email> subjectAcendingComparator = Collections.reverseOrder(subjectDescendingComparator);
public static Comparable<Email> getDecendingSubjectComparator{
return subjectDescendingComparator;
}
public static Comparable<Email> getAcendingSubjectComparator{
return subjectAcendingComparator;
}
}