Soalan:
Apabila bekerja dengan senarai objek (cth., Orang), bagaimana kita boleh mengisih mengikut perbezaan yang fleksibel sifat (cth., nama, umur, atau negara)?
Jawapan:
Walaupun antara muka Sebanding membenarkan pengisihan mengikut satu sifat, pendekatan yang lebih serba boleh ialah menggunakan pembanding tersuai dengan kaedah Collections.sort. Contoh untuk mengisih kelas Orang:
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; } }
Menggunakan pembanding:
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 }
Dengan menggunakan pembanding tersuai, anda mendapat fleksibiliti untuk mengisih koleksi objek mengikut mana-mana harta yang diingini, dengan menyediakan penyelesaian yang mudah dan serba boleh untuk menyusun struktur data yang kompleks.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyusun Senarai Objek Secara Fleksibel mengikut Sifat Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!