2012-06-01 19 views
41

Bir özellik tarafından bir ArrayList sıralamak istiyorum. Bu Android sıra arraylist özelliklerine göre

public class FishDB{ 

    public static Object Fish; 
    public ArrayList<Fish> list = new ArrayList<Fish>(); 

    public class Fish{ 
     String name; 
     int length; 
     String LatinName; 
     //etc. 

     public Vis (String name) { 
      this.name = name; 
     } 
    } 

    public FishDB() { 
     Fish fish; 

     fish = new Fish("Shark"); 
     fish.length = 200; 
     fish.LatinName = "Carcharodon Carcharias"; 

     fish = new Fish("Rainbow Trout"); 
     fish.length = 80; 
     fish.LatinName = "Oncorhynchus Mykiss"; 

     //etc. 
     } 
    } 
} 

Şimdi başka bir etkinlikle latinname ıla örneğin bir özelliğiyle bu ArrayList sıralamak acze istiyorum ... benim kodudur. Ama bunu nasıl yapacağımı bilmiyorum. Kimse nasıl biliyor mu?

+0

'Collections.sort (arrayList)' yi deneyin; – Lucifer

+0

@Lucifer Bunu yaparsanız, arranızın genel türü yList java.lang.Comparable –

cevap

115

Bunları, örneğin, bir Comparator uygulamak gerekir: Sonra

public class FishNameComparator implements Comparator<Fish> 
{ 
    public int compare(Fish left, Fish right) { 
     return left.name.compareTo(right.name); 
    } 
} 

ve şu şekilde sıralamak şu şekildedir:

Collections.sort(fishes, new FishNameComparator()); 
+0

uygulamalıdır, Teşekkürler, ama hala bir sorunum var. Arraylisti bir aktivitede sıralamak istiyorum. Başlangıçta duruyor: public class fishList ListActivity öğesini genişletiyor { Ve genel sınıf FishNameComparator yazarken, Comparator { iki hata veriyor: yerel sınıf FishNameComparator için yasadışı değiştirici; sadece soyut veya finale izin verilir. Ve: FishNameComparator türü, devralınan soyut yöntem Karşılaştırıcı .compare (String, String) uygulamalıdır. Sadece cevabında duranı yaptım. – Simon

+2

@ user1380611: Bunu yuvalanmış bir sınıf olarak uyguluyorsanız, o zaman bir "statik sınıf" olmalıdır. Ve benim örneğimi berbat ettim, karşılaştırmalı 'olmalıdır. –

+0

Benim için mükemmel çalışıyor. Burada artan sırada sıralar. –

40

Sadece bunu yapabilir yapabilirsiniz:

Collections.sort(list, new Comparator<Fish>() { 
    public int compare(Fish o1, Fish o2) { 
     return o1.name.compareTo(o2.name); 
    } 
}); 
+0

Daha önce K-ballo – Simon

+7

tarafından yanıtlanmış ve kabul edilmiş bir cevap evet ama daha erişilebilir bir formatta koydu. –

+1

Bu daha iyi! –