ホームページ >Java >&#&チュートリアル >オブジェクトのリストをさまざまなプロパティごとに柔軟に並べ替えるにはどうすればよいですか?

オブジェクトのリストをさまざまなプロパティごとに柔軟に並べ替えるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-04 01:36:10468ブラウズ

How Can I Flexibly Sort Lists of Objects by Different Properties?

オブジェクトのコレクションを簡単に並べ替える

質問:

オブジェクトのリスト (例: 人) を操作する場合、異なる基準で柔軟に並べ替えるにはどうすればよいですか?プロパティ(例:名前、年齢、 country)?

回答:

Comparable インターフェイスでは単一のプロパティによる並べ替えが可能ですが、より汎用性の高いアプローチは、Collections.sort メソッドでカスタム コンパレーターを使用することです。 Person クラスを並べ替える例:

public class FlexiblePersonComparator implements Comparator<Person> {
    public enum Order { Name, Age, Country }

    private Order sortingBy = Order.Name;

    @Override
    public int compare(Person person1, Person person2) {
        switch (sortingBy) {
            case Name:
                return person1.name.compareTo(person2.name);
            case Age:
                return person1.age.compareTo(person2.age);
            case Country:
                return person1.country.compareTo(person2.country);
        }
        throw new RuntimeException("Practically unreachable code, can't be thrown");
    }

    public void setSortingBy(Order sortBy) {
        this.sortingBy = sortBy;
    }
}

コンパレータの使用:

public void sortPersonsBy(FlexiblePersonComparator.Order sortingBy) {
    List<Person> persons = this.persons;  // Useless line for clarification
    FlexiblePersonComparator comparator = new FlexiblePersonComparator();
    comparator.setSortingBy(sortingBy);
    Collections.sort(persons, comparator); // Sorting the list
}

カスタム コンパレータを使用すると、オブジェクトのコレクションを任意のプロパティで柔軟に並べ替えることができます。複雑なデータ構造をソートするための便利で汎用性の高いソリューションです。

以上がオブジェクトのリストをさまざまなプロパティごとに柔軟に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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