Java 中的匿名比较器

在 Java 中,我们可以通过两种方式创建匿名比较器:一种使用匿名类,另一种使用 Lambda 表达式。本教程演示了如何在 Java 中创建匿名比较器。

在 Java 中使用匿名类的匿名比较器

要使用匿名类创建匿名比较器,请按照以下步骤操作。

  • 首先,创建一个用户定义的类。
  • 然后,创建另一个将用于比较器对象的类。这个类将包括一个带有 sort 方法的 collection 类。
  • 现在,使用匿名类,创建比较器对象,然后在比较器对象的帮助下实现比较方法。
  • Collections 类中的 Sort 方法将通过传递对象来调用。
  • 根据需要打印或使用分类信息。

让我们根据上述步骤在 Java 中尝试一个示例。

package delftstack;
import java.util.*;
class Employee{
    String name;
    double salary;
    Employee(String name, double salary){
        this.name = name;
        this.salary = salary;
    }
}
public class Anonymous_Comparator{
    public static void main(String args[]) {
        ArrayList<Employee> Employee_List = new ArrayList<Employee>();
        Employee_List.add(new Employee("Mike", 3000));
        Employee_List.add(new Employee("Michelle", 2500));
        Employee_List.add(new Employee("Tina", 4000));
        Employee_List.add(new Employee("Shawn", 5000));
        Employee_List.add(new Employee("Jack", 4500));
        Employee_List.add(new Employee("Jenny", 3500));
        Collections.sort(Employee_List, new Comparator<Employee>() {
            public int compare(Employee employee1, Employee employee2) {
                if(employee1.salary < employee2.salary) {
                    return 1;
                }
                return -1;
            }
        });
        System.out.println("Name\tSalary");
        System.out.println("---------------------");
        for(Employee Employee : Employee_List) {
            System.out.println(Employee.name + "  =  " + Employee.salary);
        }
    }
}

上面的代码为 Employee 类创建了一个匿名比较器,并根据薪水对 Employee 列表进行排序。

见输出:

Name	Salary
---------------------
Shawn  =  5000.0
Jack  =  4500.0
Tina  =  4000.0
Jenny  =  3500.0
Mike  =  3000.0
Michelle  =  2500.0

在 Java 中使用 Lambda 表达式的匿名比较器

要使用 lambda 表达式创建匿名比较器,请按照以下步骤操作。

  • 首先,创建一个用户定义的类。
  • 然后,创建另一个将用于比较器对象的类。这个类将包括一个带有 sort 方法的 collection 类。
  • 现在,使用 lambda 表达式,创建比较器对象接口,然后在比较器接口的帮助下实现 compare 方法。
  • Collections 类中的 Sort 方法将通过传递对象来调用。
  • 根据需要打印或使用分类信息。

让我们根据上述步骤在 Java 中尝试一个示例。

package delftstack;
import java.util.*;
class Employee{
    String name;
    double salary;
    Employee(String name, double salary){
        this.name = name;
        this.salary = salary;
    }
}
public class Anonymous_Comparator{
    public static void main(String args[]) {
        ArrayList<Employee> Employee_List = new ArrayList<Employee>();
        Employee_List.add(new Employee("Mike", 3000));
        Employee_List.add(new Employee("Michelle", 2500));
        Employee_List.add(new Employee("Tina", 4000));
        Employee_List.add(new Employee("Shawn", 5000));
        Employee_List.add(new Employee("Jack", 4500));
        Employee_List.add(new Employee("Jenny", 3500));
        Collections.sort(Employee_List, (employee1, employee2) -> { // Using Lambda Expressions
            if(employee1.salary < employee2.salary) {
                return 1;
            }
            return -1;
	    });
        System.out.println("Name\tSalary");
        System.out.println("---------------------");
        for(Employee Employee : Employee_List) {
            System.out.println(Employee.name + "  =  " + Employee.salary);
        }
    }
}

上面的代码将在匿名比较器中使用 lambda 表达式对 Employee 进行排序。见输出:

Name	Salary
---------------------
Shawn  =  5000.0
Jack  =  4500.0
Tina  =  4000.0
Jenny  =  3500.0
Mike  =  3000.0
Michelle  =  2500.0

我们创建了数据类来理解问题,但这些比较器也可以轻松应用于内置类型。