这是比较器降序时如何实现升序排序?

时间:2012-04-25 16:56:03

标签: java comparator

当比较器按降序排序时,这是如何实现升序排序的吗?

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

3 个答案:

答案 0 :(得分:2)

是的,确实如此。如果您反转降序比较器,则会得到一个升序比较器。

要打破它,这就是你在做的事情:

Comparator ascending = Collections.reverseOrder(new Email.SubjectDescendingComparator());
Collections.sort(emails, ascending);

答案 1 :(得分:1)

冒着“那个StackOverflow家伙”的风险......:)

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

  

public static Comparator reverseOrder()

     

返回一个比较器,它强加了自然顺序的反转>在实现Comparable的对象集合上   接口。 (自然顺序是由...强加的排序   对象自己的compareTo方法。)这可以实现简单的习惯用法   排序(或维护)对象的集合(或数组)   以反自然顺序实现Comparable接口。

考虑如何自己实现这一点很有教育意义,compareTo返回一个int,你需要做的只是反转结果....

答案 2 :(得分:0)

是的,这是一个很好的解决方案

我个人认为比较器是一个静态成员,因此每次要排序时都不需要重新初始化它,并且电子邮件也可以提供升序比较器

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;
    }


}