当比较器按降序排序时,这是如何实现升序排序的吗?
// Sorts the emails alphabetically by subject in ascending order.
public void sortBySubjectAscending()
{
Collections.sort(emails, Collections.reverseOrder(new Email.SubjectDescendingComparator()));
}
答案 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;
}
}