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