Java の匿名コンパレータ

Sheeraz Gul 2023年10月12日
  1. Java で匿名クラスを使用する匿名コンパレータ
  2. Java で Lambda 式を使用する匿名コンパレータ
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

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

著者: 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