14 EYLÜL 2009, PAZARTESİ
Nasıl birden fazla tür parametreleri ile bir liste sıralama?
Bir sınıf Person
adında birden çok özellikleri ile, örneğin:
public class Person {
private int id;
private String name, address;
// Many more properties.
}
Person
-çok sayıda nesne ArrayList<Person>
saklanır. Birden fazla tür parametreleri tarafından bu liste, ve zaman zaman farklı sıralamak istiyorum. Mesela ben bir kez name
göre sıralamak için ve daha sonra address
artan azalan ve sadece id
azalan tarafından başka bir zaman istiyor.
Ve benim sıralama yöntemleri (yani, Collections.sort(personList, someComparator)
kullanmak istiyorum. yaratmak istemiyorum Bunu başaran en zarif çözüm nedir?
CEVAP
14 EYLÜL 2009, PAZARTESİ
Numaralama yaklaşım aslında mantıklı olduğunu düşünüyorum, ama geçiş ifadeleri çok fazla nesne odaklı bir yaklaşım gerekiyor. Düşünün:
enum PersonComparator implements Comparator<Person> {
ID_SORT {
public int compare(Person o1, Person o2) {
return Integer.valueOf(o1.getId()).compareTo(o2.getId());
}},
NAME_SORT {
public int compare(Person o1, Person o2) {
return o1.getFullName().compareTo(o2.getFullName());
}};
public static Comparator<Person> decending(final Comparator<Person> other) {
return new Comparator<Person>() {
public int compare(Person o1, Person o2) {
return -1 * other.compare(o1, o2);
}
};
}
public static Comparator<Person> getComparator(final PersonComparator... multipleOptions) {
return new Comparator<Person>() {
public int compare(Person o1, Person o2) {
for (PersonComparator option : multipleOptions) {
int result = option.compare(o1, o2);
if (result != 0) {
return result;
}
}
return 0;
}
};
}
}
Kullanımı (statik alma ile) bir örnek.
public static void main(String[] args) {
List<Person> list = null;
Collections.sort(list, decending(getComparator(NAME_SORT, ID_SORT)));
}
Bunu Paylaş:
Nasıl API ASP.NET bir Web için birden ...
Nasıl birden fazla sınıflar ile bir öğ...
Nasıl böyle büyük mükafat içinde birde...
Nasıl birden fazla çalıştırmak için .B...
Nasıl Python ile birden fazla değer ge...