2012-04-25 41 views
0

这是比较排序下降时如何实现升序排序吗?这是如何在比较器排序下降时执行升序排序?

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

我很想提交答案,只是说:“是的。” ...... – aardvarkk 2012-04-25 16:57:31

+1

你有一个小的测试类试了一下? – radimpe 2012-04-25 16:57:43

回答

2

是的,它每次都重新初始化。如果反转下降比较器,则会得到上升比较器。

要打破它,这是你在做什么:

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

在被 “那个家伙的StackOverflow” 风险...... :)

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

公共静态比较reverseOrder()

返回一个比较这会在实现可比较接口的对象集合上强加自然顺序的反转。 (自然排序是 对象自己的compareTo方法施加的顺序。)这使 排序(或维护)对象的集合(或阵列)的简单方式成为可能,该对象的集合(或阵列)以反向自然顺序实现了Comparable接口。

这是教育要想想你将如何实现这个自己,的compareTo返回一个int,所有你需要做的就是反转的结果....

0

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

我个人倒有一个比较是静态成员,所以你不需要你要排序,并有电子邮件也能够给出一个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; 
    } 


} 
+0

我将如何更改方法使其变为静态? – nnn 2012-04-25 17:46:29

+0

@nnn检查我的编辑,但添加静态签名就足够了 – 2012-04-25 18:14:13