「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java でカスタム コンパレータ関数を作成するにはどうすればよいですか?

Java でカスタム コンパレータ関数を作成するにはどうすればよいですか?

2024 年 11 月 1 日に公開
ブラウズ:347

How to Write a Custom Comparator Function in Java?

1. Java のコンパレータの基本を理解する

Java では、Comparator インターフェイスは、2 つのオブジェクトを比較して順序を決定する方法を提供します。これは、リストや配列などのコレクションをカスタムの順序で並べ替える場合に特に便利です。

カスタム Comparator は、オブジェクトの自然な順序 (Comparable 実装で定義されている) がニーズを満たさない場合に必要です。たとえば、従業員オブジェクトのリストを給与、名前、または年齢で並べ替えるには、異なるコンパレータが必要になる場合があります。

2. カスタム コンパレータ関数の作成

カスタムの コンパレータ を作成するプロセスを見てみましょう。

2.1 例: 従業員リストを給与順に並べ替える

フィールド nameage 、および 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 メソッドをオーバーライドします。

2.2 デモ: 従業員リストの並べ替え

次に、従業員のリストを作成し、カスタムの Comparator を使用して並べ替えましょう。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List 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);
    }
}

2.3 デモの結果

上記のコードを実行すると、次の出力が生成されます:

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 のおかげで、従業員のリストが給与の昇順で並べ替えられるようになりました。

3. 高度なカスタム コンパレータ

場合によっては、より複雑な比較ロジックが必要な場合や、複数のフィールドで並べ替えたい場合があります。

3.1 例: 複数の基準による並べ替え

コンパレータを変更して、最初に給与で並べ替え、次に同点の場合は名前で並べ替えましょう。

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;
    }
}

3.2 デモ: 給与と名前による並べ替え

SalaryThenNameComparator を使用すると、給与と名前で従業員を並べ替えられるようになりました:

Collections.sort(employees, new SalaryThenNameComparator());

4. 結論

Java でカスタム Comparator 関数を作成すると、特定のニーズに合わせてコレクションの並べ替え動作を調整できます。単一フィールドによる単純な比較が必要な場合でも、複数の基準による複雑な並べ替えが必要な場合でも、Comparator は柔軟で強力なソリューションを提供します。

ご質問がある場合、またはさらに詳しい説明が必要な場合は、お気軽に以下にコメントを残してください。

投稿の詳細はで読む: Java でカスタム コンパレータ関数を作成する方法

リリースステートメント この記事は次の場所に転載されています: https://dev.to/anh_trntun_4732cf3d299/how-to-write-a-custom-comparator-function-in-java-198j?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3