当比较器降序排序时,这是如何实现升序排序的?
// Sorts the emails alphabetically by subject in ascending order.
public void sortBySubjectAscending()
{
Collections.sort(emails, Collections.reverseOrder(new Email.SubjectDescendingComparator()));
}
当比较器降序排序时,这是如何实现升序排序的?
// 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,你需要做的就是反转结果......
是的,这是一个很好的解决方案
就个人而言,我会让比较器成为静态成员,因此您无需在每次想要排序时都重新初始化它,并且电子邮件也可以提供升序比较器
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;
}
}