0

これは、コンパレータが降順でソートするときに昇順ソートを実装する方法ですか?

// Sorts the emails alphabetically by subject in ascending order.
public void sortBySubjectAscending()
{
Collections.sort(emails, Collections.reverseOrder(new Email.SubjectDescendingComparator()));
}
4

3 に答える 3

2

はい、そうです。降順のコンパレータを逆にすると、昇順のコンパレータになります。

それを分解するために、これはあなたがしていることです:

Comparator ascending = Collections.reverseOrder(new Email.SubjectDescendingComparator());
Collections.sort(emails, ascending);
于 2012-04-25T17:03:52.410 に答える
1

「あのStackOverflowの男」になるリスクがあります...... :)

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#reverseOrder%28%29から

public static コンパレータ reverseOrder()

Comparable インターフェイスを実装するオブジェクトのコレクションに対して、自然順序付けの逆を強制するコンパレータを返します。(自然順序付けは、オブジェクト自体の compareTo メソッドによって課される順序付けです。)これにより、Comparable インターフェースを逆自然順序で実装するオブジェクトのコレクション (または配列) をソート (または維持) するための単純なイディオムが可能になります。

これを自分で実装する方法を考えるのは教育的です。compareTo は int を返します。必要なのは結果を反転することだけです....

于 2012-04-25T17:02:45.933 に答える
0

はい、これは良い解決策です

個人的には、コンパレーターを静的メンバーにするので、ソートするたびに再初期化する必要がなく、電子メールでも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;
    }


}
于 2012-04-25T17:03:27.640 に答える