ホームページ >Java >&#&チュートリアル >コンパレータを使用して Java でカスタム オブジェクトのリストを正しく並べ替えるにはどうすればよいですか?

コンパレータを使用して Java でカスタム オブジェクトのリストを正しく並べ替えるにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-25 06:16:09546ブラウズ

How Can I Correctly Sort a List of Custom Objects in Java Using Comparators?

Java でコンパレータを使用してオブジェクトを並べ替える

コンパレータについて

Java では、コンパレータはオブジェクトの並べ替え方法を定義するインターフェイスです並べ替えの目的で比較されます。コンパレータを実装すると、Comparable インターフェイスによって提供される自然な順序から逸脱するカスタムの並べ替え動作を定義できます。

エラー分析

コードで例外が発生しました。 Comparable または Comparator インターフェイスを実装せずに、People オブジェクトを含む ArrayList を並べ替えようとしています。 People クラスの比較メソッドは、Integer ラッパー オブジェクトではなく People クラスのインスタンスを比較する必要があるため、正しくありません。

解決策

この問題を解決するには、次の手順を実行します。次のように、ID に基づいて People オブジェクトを比較する Comparator を実装できます。

import java.util.Comparator;

public class PeopleComparator implements Comparator<People> {

    @Override
    public int compare(People p1, People p2) {
        return p1.getId() - p2.getId();
    }
}

TestPeople クラスでは、 PeopleComparator を使用して peps リストを並べ替えます。

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

public class TestPeople {

    public static void main(String[] args) {
        ArrayList<People> peps = new ArrayList<>();

        peps.add(new People(123, "M", 14.25));
        // ...

        Collections.sort(peps, new PeopleComparator());

        for (People person : peps) {
            System.out.println(person);
        }
    }
}

代替アプローチ

Java では、割り当て可能な Comparator クラスを使用してカスタム並べ替えを実装する代替方法を提供しています。別のクラスを必要とせずに、sort メソッドに直接アクセスできます。例:

Collections.sort(peps, new Comparator<People>() {

    @Override
    public int compare(People p1, People p2) {
        return p1.getId() - p2.getId();
    }
});

さらに、新しいラムダ式構文 (Java 8) を使用して、コンパレータの実装を簡素化できます:

Collections.sort(peps, (p1, p2) -> p1.getId() - p2.getId());

以上がコンパレータを使用して Java でカスタム オブジェクトのリストを正しく並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。