繁体   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