我正在学习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);
}
}
SENIORITY_ORDER
Comparator
(用于比较排序中的Employee
)是一个匿名类。链接的 Java 教程(部分)
匿名类使您能够使代码更加简洁。它们使您能够同时声明和实例化类。它们类似于本地类,只是它们没有名称。如果只需要使用一次本地类,请使用它们。
众所周知. 比较器是如何比较拖曳对象的规则。
你可以进入这个方法: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]);
}
}
如果你的对象没有实现可比较,那么你必须有一个比较器否则就是错的。 Collections.sort 将调用 compare() 方法。
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 中 Comparable
接口的 compareTo()
方法比较两个Employee
对象的 hireDate 属性。compareTo()
,此方法按字典顺序比较两个属性,即 e1.hireDate 和 e2.hireDate,并返回正整数、负整数或零,具体取决于 e2.hireDate 是大于、小于还是等于 e1.hireDate。
(希望你已经了解了JAVA中比较器接口和嵌套类的概念)