我一直在使用Java SE 8中的Comparator接口进行分析。现在,我很想知道如何使用实现reverseOrder()
接口的类使用Comparator<T>
方法。我写了一个示例程序来检查一下。
class NaturalOrderString implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
}
public class App {
public static void main(String[] args) {
Comparator<String> mycom= new NaturalOrderString();
mycom.reverseOrder(); // can't use this
}
}
因此,现在我应该能够使用与
Comparator
接口关联的所有方法。但是令人惊讶的是,我输入mycom.
,然后没有对reverseOrder()方法的建议。为什么呢NaturalOrderString
类实现Comparator<T>
。因此,我应该接受
mycom
对象来访问reverseOrder()
方法。是不是而且,我知道列表的排序是使用自然排序进行的。因此,使用集合类,我可以访问
reverseOrder()
方法。因此,在我的示例之前,我可以愉快地编写Collections.reverseOrder(mycom); // that's fine.
但是我的问题是为什么我不能通过实现
reverseOrder()
的类的对象使用Comparator<T>
?而且,由于我们无法访问它,因此Java为什么在reverseOrder()
接口中包含Comparator<T>
方法?或者,如果确实有可能通过关于我的代码的 mycom 对象访问
reverseOrder()
,请举一个例子。 最佳答案
基本上,reverseOrder()方法将返回一个与自然顺序相反的比较器。
首先,根据您的问题,由于reverseOrder()是 static method
,因此您不能像mycom.reverseOrder()那样使用它。您必须使用像Comparot.reverseOrder()。
遵循您的代码。我创建了一个ArrayList来演示和使用Comparator.reverseOrder()
public class App {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> people= new ArrayList<String>();
people.add("Sam");
people.add("Bob");
people.add("Andrew");
people.add("Michel");
people.add("Abe");
people.add("John");
Comparator<String> mycom= new NaturalOrderString();
Collections.sort(people); // this will sort the people array list in natural order
Collections.sort(people,Comparator.reverseOrder()); // Here's your desired method it will reverse the natural order as documentation.
}
}
希望您现在对这个概念很清楚。