Java 中的匿名比较器

Sheeraz Gul 2023年10月12日
  1. 在 Java 中使用匿名类的匿名比较器
  2. 在 Java 中使用 Lambda 表达式的匿名比较器
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

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

作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

相关文章 - Java Comparator