Java の匿名コンパレータ
Sheeraz Gul
2023年10月12日
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 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