簡體   English   中英

當比較器以降序排序時,這如何實現升序排序?

[英]Is this how to implement ascending sort when the comparator sorts descending?

當比較器以降序排序時,這如何實現升序排序?

// 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

公共靜態比較器reverseOrder()

返回一個比較器,該比較器在實現Comparable接口的對象集合上強加自然順序>的逆向。 (自然順序是由對象自己的compareTo方法強加的順序。)這為用於以反向自然順序實現(實現)Comparable接口的對象的集合(或數組)排序(或維護)的簡單習慣用法。

考慮如何自己實現此方法很有教育意義,compareTo返回一個int,您要做的就是將結果求逆。

是的,這是一個很好的解決方案

我個人將比較器設為靜態成員,因此您無需在每次要排序時都重新初始化它,並且讓Email能夠提供一個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;
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM