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{ @Override public int compare(Employee e1, Employee e2) { return Double.compare(e1.getSalary(), e2.getSalary()); } }
この例では、SalaryComparator クラスは Comparator インターフェイスを実装し、従業員を給与で比較するために Compare メソッドをオーバーライドします。
次に、従業員のリストを作成し、カスタムの Comparator を使用して並べ替えましょう。
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { Listemployees = 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}
カスタムの Comparator のおかげで、従業員のリストが給与の昇順で並べ替えられるようになりました。
場合によっては、より複雑な比較ロジックが必要な場合や、複数のフィールドで並べ替えたい場合があります。
コンパレータを変更して、最初に給与で並べ替え、次に同点の場合は名前で並べ替えましょう。
class SalaryThenNameComparator implements Comparator{ @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 でカスタム コンパレータ関数を作成する方法
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3