SORU
7 Kasım 2011, PAZARTESİ


Sıralama nesneleri birden çok anahtar kullanarak Java

Ördek nesnelerin bir koleksiyonu var ve istiyorumbirden çok anahtar kullanarak bunları sıralamak.

class Duck {
    DuckAge age; //implements Comparable
    DuckWeight weight; //implements Comparable
    String name;
}
List<Duck> ducks = Pond.getDucks();

örn. Onları sıralamak istiyorumöncelikle kendi ağırlıkları ileveyaşlarına göre ikincil olarak. Eğer iki ördek aynı kilo ve aynı yaşta ise, o zaman onları ayırt kendi kullanarak izin verinüçüncül bir anahtar gibi isimler. Böyle şeyler yapabilirim:

Collections.sort(ducks, new Comparator<Duck>(){
    @Override
    public int compare(Duck d1, Duck d2){
        int weightCmp = d1.weight.compareTo(d2.weight);
        if (weightCmp != 0) {
            return weightCmp;
        }
        int ageCmp = d1.age.compareTo(d2.age);
        if (ageCmp != 0) {
            return ageCmp;
        }
        return d1.name.compareTo(d2.name);
    }
});

Aslında bu oldukça sık yaparım ama bu çözüm iyi kokular gelmiyor. İyi ölçeklendirme değil, ve çok kolay berbat. Kesinlikle Ördekler birden fazla anahtarı kullanarak sıralama daha iyi bir yolu olmalı! Herkes daha iyi bir çözüm biliyor mu?

EDİTelse gereksiz dalları kaldırıldı

CEVAP
7 Kasım 2011, PAZARTESİ


Çok kötü görünmüyor. Guava, sadece bunu yapabilirsiniz kullanarak:

return ComparisonChain.start()
     .compare(d1.weight, d2.weight)
     .compare(d1.age, d2.age)
     .compare(d1.name, d2.name)
     .result();

daha zarif. Apache commons-lang benzer bir yapı vardır (CompareToBuilder).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012
  • thenewboston

    thenewboston

    4 ŞUBAT 2008
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007