我正在学习Java,我在Youtube上看到了下面的代码。我只是想知道这部分代码是如何工作的。
static final Comparator<Employee> SENIORITY_ORDER =
new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e2.hireDate().compareTo(e1.hireDate());
}
};
有些人可以向我解释一下吗?在此先感谢您的帮助!
import java.util.*;
public class EmpSort {
static final Comparator<Employee> SENIORITY_ORDER =
new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e2.hireDate().compareTo(e1.hireDate());
}
};
// Employee database
static final Collection<Employee> employees = ... ;
public static void main(String[] args) {
List<Employee> e = new ArrayList<Employee>(employees);
Collections.sort(e, SENIORITY_ORDER);
System.out.println(e);
}
}
答案 0 :(得分:1)
SENIORITY_ORDER
Comparator
(用于比较排序中的Employee
)是Anonymous Class。链接的Java教程读取(部分)
匿名类使您可以使代码更简洁。它们使您能够同时声明和实例化一个类。他们就像当地的班级,除了他们没有名字。如果您只需要使用本地类一次,请使用它们。
答案 1 :(得分:0)
好吧我们都知道。比较器是如何比较两个对象的规则。
你可以进入这个方法:Collections.sort(e,SENIORITY_ORDER);
你会看到你想要的答案
public static <T> void sort(List<T> list, Comparator<? super T> c) {
Object[] a = list.toArray();
Arrays.sort(a, (Comparator)c); //this is your rule to compare
ListIterator i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set(a[j]);
}
}
如果您的Object没有实现可比性,那么您必须拥有一个比较器 或者这将是一个错误。 Collections.sort将调用compare()方法。
答案 2 :(得分:0)
static final Comparator<Employee> SENIORITY_ORDER =
new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e2.hireDate().compareTo(e1.hireDate());
}
};
语句static final Comparator<Employee> SENIORITY_ORDER = new Comparator<Employee>(){}
正在创建Comparator<Employee>
接口的引用,该引用指向实现Comparator<Employee>
接口的匿名内部类的实例。因此,您将覆盖匿名类中的比较器接口的compare()
方法。
在compare()
方法内部,您正在使用Java中Employee
接口的compareTo()
方法比较两个Comparable
对象的 hireDate 属性。此方法compareTo()
从字典上比较两个属性,即 e1.hireDate 和 e2.hireDate ,并返回正整数,负整数或零,具体取决于 e2.hireDate 是大于,小于还是等于 e1.hireDate 。
(希望您已经对JAVA中的比较器界面和嵌套类的概念了如指掌)