HOWTO · Java

Java 中的匿名比较器

本教程演示了如何在 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

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