2016-04-14 5 views
1

Bu yüzden, özellikle otomobil, motor ve bikicles içeren bir araç listesi, özellikle bir araç listemiz var. Bu nesnelerin her birinin farklı özellikleri vardır (araba ve motor maksimum hıza sahipken, bicicle yok gibi.)Diziyi belirli bir öğeye göre ayırma

Moto Bicicle ve Araba, Araç ve Araç alt sınıflarıdır Arabirim Arabirimi karşılaştırılabilir.

Yaptıkları yıl içinde ortak bir şeyleri var ve bu özel özniteliği kullanarak dizilimimi sıralamak istedim. Varsayılan olarak java, nesnelerin ortak olduğu bir başka özelliğe göre sıralama yapar; bu, "renk" dir.

Bu

kod dizileri sıralamak için kullanılır.

public static <T> void sortArray(Comparable<T>[] a) { 
     Arrays.sort(a); 
} 

Ben listeyi sıralamak için kullanmak istiyorum niteliğini seçmek için bir yol var mı (Bu biri olmalı)? Yardım için şimdiden teşekkür ederiz.

+0

ile kullanın. t, Arabalar, Motos ve Bicicles Araç alt sınıfları olduğunu düşünüyorum ve bu Araç karşılaştırılabilir arayüzü uygular. Bu son nokta, aracın compareTo olan bir yönteme sahip olduğunu ima eder. "Renk" yerine "yıl" kullanmak için bu yöntemi değiştirin. – RubioRic

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator) – ControlAltDel

+0

Bu bağlantıyı 3. noktadan takip edebilirsiniz. Önceki yorumumda ne demek istediğimin bir örneğini bulabilirsin http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/ – RubioRic

cevap

1

Varsayılan olarak Arrays.sort öğesinin öğelerine göre Comparable natural ordering numarasına göre sıralanır. Bunu değiştirmek isterseniz, Arrays.sort(T[] a, Comparator<? super T> c) kullanın, kendi karşılaştırıcınızı tanımlamanıza olanak tanır. Artık bir karşılaştırıcı uygulamak ve Arrays.sort(array, comparator) için iletebilirsiniz

+0

Oh, sadece güzel ^^ çalıştım Çok teşekkürler: D Aslında şu an mantıklı geliyor xD. Teşekkürler. – Viscceras

1

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort(T[], java.util.Comparator). lambdas kullanılması veya yöntem bu işler kolaydır:

Vehicle[] v = ... 
Arrays.sort(v, (v1,v2) -> v1.getYear() - v2.getYear()); 

veya

Arrays.sort(v, Comparator.comparing(Vehicle::getYear)); 

Belirli bir özelliğe göre bir dizi sıralar genel bir işlev yazabilirsiniz Buna dayanarak:

public static <T, U extends Comparable<? super U>> void sortArray(T[] a, 
    Function<? super T, ? extends U> attribute) { 
    Arrays.sort(a, Comparator.comparing(attribute)); 
} 

ve tex için,

sortArray(v, Vehicle::getYear);