Java では、Comparator インターフェイスは、2 つのオブジェクトを比較して順序を決定する方法を提供します。これは、リストや配列などのコレクションをカスタムの順序で並べ替える場合に特に便利です。
カスタム Comparator は、オブジェクトの自然な順序 (Comparable 実装で定義されている) がニーズを満たさない場合に必要です。たとえば、従業員オブジェクトのリストを給与、名前、または年齢で並べ替えるには、異なるコンパレータが必要になる場合があります。
カスタム コンパレータ を作成するプロセスを見てみましょう。
フィールド name 、 age 、および salary を持つクラス Employee を考えます。 Employee オブジェクトのリストを salary で昇順に並べ替えたいと考えています。
import java.util.Comparator; class Employee { private String name; private int age; private double salary; // Constructor, getters, and setters public Employee(String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } public double getSalary() { return salary; } @Override public String toString() { return "Employee{" + "name='" + name + ''' + ", age=" + age + ", salary=" + salary + '}'; } } class SalaryComparator implements Comparator<Employee> { @Override public int compare(Employee e1, Employee e2) { return Double.compare(e1.getSalary(), e2.getSalary()); } }
この例では、SalaryComparator クラスは Comparator インターフェイスを実装し、従業員を給与で比較するための Compare メソッドをオーバーライドします。
次に、従業員のリストを作成し、カスタム コンパレータ を使用して並べ替えてみましょう。
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<Employee> employees = new ArrayList<>(); employees.add(new Employee("John", 28, 50000)); employees.add(new Employee("Anna", 32, 75000)); employees.add(new Employee("Mike", 25, 45000)); System.out.println("Before Sorting:"); employees.forEach(System.out::println); // Sort employees by salary Collections.sort(employees, new SalaryComparator()); System.out.println(" After Sorting by Salary:"); employees.forEach(System.out::println); } }
上記のコードを実行すると、次の出力が生成されます:
Before Sorting: Employee{name='John', age=28, salary=50000.0} Employee{name='Anna', age=32, salary=75000.0} Employee{name='Mike', age=25, salary=45000.0} After Sorting by Salary: Employee{name='Mike', age=25, salary=45000.0} Employee{name='John', age=28, salary=50000.0} Employee{name='Anna', age=32, salary=75000.0}
カスタム コンパレータ のおかげで、従業員のリストが給与の昇順で並べ替えられるようになりました。
場合によっては、より複雑な比較ロジックが必要な場合や、複数のフィールドで並べ替えたい場合があります。
コンパレータを変更して、最初に給与で並べ替え、次に同点の場合は名前で並べ替えましょう。
class SalaryThenNameComparator implements Comparator<Employee> { @Override public int compare(Employee e1, Employee e2) { int salaryCompare = Double.compare(e1.getSalary(), e2.getSalary()); if (salaryCompare == 0) { return e1.getName().compareTo(e2.getName()); } return salaryCompare; } }
SalaryThenNameComparator を使用すると、給与と名前で従業員を並べ替えることができます。
Collections.sort(employees, new SalaryThenNameComparator());
Java でカスタム Comparator 関数を作成すると、特定のニーズに合わせてコレクションの並べ替え動作を調整できます。単一フィールドによる単純な比較が必要な場合でも、複数の基準による複雑な並べ替えが必要な場合でも、Comparator は柔軟で強力なソリューションを提供します。
ご質問がある場合、またはさらに詳しい説明が必要な場合は、お気軽に以下にコメントを残してください。
詳細については、 で投稿をご覧ください: Java でカスタム コンパレータ関数を作成する方法
以上がJava でカスタム コンパレータ関数を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。