ホームページ >Java >&#&チュートリアル >コンパレータを使用して 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 サイトの他の関連記事を参照してください。