SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • After Effects Tutorials w/ Mikey

    After Effect

    24 HAZİRAN 2009
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011
  • Truc Minh

    Truc Minh

    23 Ocak 2011