此语句的工作原理:"static final Comparator<Employee> SENIORITY_ORDER = new Comparator<Employee>()



我正在学习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中比较器接口嵌套类的概念)

相关内容

最新更新