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

我們建立了資料類來理解問題,但這些比較器也可以輕鬆應用於內建型別。