オブジェクトの ArrayList のカスタム並べ替え
最新のアプリケーションでデータを管理する場合、多くの場合、特定の基準に従ってオブジェクトを並べ替える必要があります。並べ替えによりデータの可読性が向上し、データの検索が容易になり、操作が合理化されます。一般的なシナリオの 1 つは、カスタムの並べ替え順序を使用してオブジェクトの ArrayList を並べ替えることです。
連絡先を ArrayList に保存するアドレス帳アプリケーションがあるとします。各連絡先には、名前、自宅番号、携帯電話番号、住所のフィールドが含まれます。連絡先を名前で並べ替えるには、カスタム並べ替え関数を定義する必要があります。
自然順序付けの定義
特定のフィールドによる並べ替えが自然な要件である場合は、 Contact クラスでは、クラス内に Comparable インターフェイスを実装できます。以下に例を示します。
public class Contact implements Comparable<Contact> { private String name; // getters, setters, and other boilerplate @Override public int compareTo(Contact other) { return name.compareTo(other.name); } }
Comparable を実装すると、Contact クラスの自然な順序が確立されます。つまり、Collections.sort() メソッドを使用して、名前フィールドで ArrayList を並べ替えることができます。
List<Contact> contacts = new ArrayList<>(); // Fill the list with contacts Collections.sort(contacts);
外部注文の定義
必要な場合自然な順序以外のフィールドで並べ替える場合は、コンパレーターを作成できます。コンパレータは、外部の制御可能な並べ替えメカニズムを提供します。
Collections.sort(contacts, new Comparator<Contact>() { public int compare(Contact one, Contact other) { return one.getAddress().compareTo(other.getAddress()); } });
ここでは、デフォルトの名前フィールドではなくアドレスで並べ替えています。
コンパレータの再利用
複数のコンパレーターを作成しないようにするには、Contact クラス内でコンパレーターを定義できます。それ自体:
public class Contact { // getters, setters, and other boilerplate public static Comparator<Contact> COMPARE_BY_PHONE = new Comparator<Contact>() { public int compare(Contact one, Contact other) { return one.phone.compareTo(other.phone); } }; }
これで、事前定義されたコンパレーターを使用して電話でソートできるようになります:
Collections.sort(contacts, Contact.COMPARE_BY_PHONE);
汎用 Bean コンパレーター
汎用ソート用、BeanComparator の使用を検討してください:
public class BeanComparator implements Comparator<Object> { private String getter; public BeanComparator(String field) { this.getter = "get" + field.substring(0, 1).toUpperCase() + field.substring(1); } public int compare(Object o1, Object o2) { // ... implementation ... } }
これにより、任意の Bean フィールドによる並べ替え:
Collections.sort(contacts, new BeanComparator("phone"));
カスタム 並べ替えを実装すると、ArrayList の並べ替え方法を制御できるようになり、データ操作がより効率的になり、特定のアプリケーション要件に合わせやすくなります。
以上がJava でオブジェクトの ArrayList のカスタム並べ替えを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。