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
Ç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
).
Bir liste Lambda/kullanarak sıralama E...
Java nasıl bir yöntem birden fazla nes...
Unıx sıralama ile sıralama birden fazl...
HashMap anahtar olarak bir bayt dizisi...
Java: switch kullanarak alt sınıf altı...