HOWTO · Java

Java の匿名コンパレータ

このチュートリアルでは、Java で匿名コンパレータを作成する方法を示します。

このページの内容

Java では、2つの方法で匿名コンパレータを作成できます。1つは匿名クラスを使用し、もう 1つは Lambda 式を使用します。このチュートリアルでは、Java で匿名コンパレータを作成する方法を示します。

Java で匿名クラスを使用する匿名コンパレータ

匿名クラスで匿名コンパレータを作成するには、以下の手順に従います。

  • まず、ユーザー定義のクラスを作成します。
  • 次に、コンパレータオブジェクトに使用される別のクラスを作成します。このクラスには、sort メソッドを持つ collection クラスが含まれます。
  • ここで、anonymous クラスを使用して、コンパレータオブジェクトを作成し、コンパレータオブジェクトを使用して 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, 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 式を使用する匿名コンパレータ

ラムダ式を使用して匿名コンパレータを作成するには、以下の手順に従います。

  • まず、ユーザー定義のクラスを作成します。
  • 次に、コンパレータオブジェクトに使用される別のクラスを作成します。このクラスには、sort メソッドを持つ collection クラスが含まれます。
  • ここで、ラムダ式を使用して、コンパレータオブジェクトインターフェイスを作成し、コンパレータインターフェイスを使用して 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);
    }
  }
}

上記のコードは、匿名コンパレータでラムダ式を使用して従業員を並べ替えます。出力を参照してください:

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

問題を理解するためにデータクラスを作成しましたが、これらのコンパレータは組み込み型にも簡単に適用できます。