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

公共静态比较器 reverseOrder()

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

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

于 2012-04-25T17:02:45.933 回答
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;
    }


}
于 2012-04-25T17:03:27.640 回答