2012-06-01 16 views
41

Ich möchte eine ArrayList von einer Eigenschaft zu sortieren. Dies ist mein Code ...Android Sortierung Arraylist nach Eigenschaften

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. 
     } 
    } 
} 

Jetzt will ich will in diesen ArrayList durch eine Eigenschaft sortieren die latinname in einer anderen Aktivität z. Aber ich weiß nicht, wie ich das machen soll. Weiß jemand wie?

+0

probiere 'Collections.sort (arrayList);' – Lucifer

+0

@Lucifer Wenn du das tust, dann der generische Typ deiner Arra yList sollte java.lang.Comparable implementieren –

Antwort

115

Sie benötigen einen Comparator, zum Beispiel zu implementieren:

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

und es dann wie folgt sortieren:

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

Danke, aber ich habe immer noch ein Problem. Ich möchte die Arraylist in einer Aktivität sortieren. Am Anfang steht: öffentliche Klasse fishList erweitert ListActivity { Und wenn ich schreibe öffentliche Klasse FishNameComparator implementiert Comparator { Es gibt zwei Fehler sagen: illegaler Modifikator für die lokale Klasse FishNameComparator; nur Abstrakt oder Finale ist erlaubt. And: Der Typ FishNameComparator muss die geerbte abstrakte Methode Comparator .compare (String, String) implementieren. Ich habe gerade getan, was in deiner Antwort steht. – Simon

+2

@ user1380611: Wenn Sie dies als eine geschachtelte Klasse implementieren, dann muss es eine 'statische Klasse' sein. Und ich habe mein Beispiel vermasselt, es sollte 'comparator ' implementiert werden. –

+0

Funktioniert perfekt für mich. Sortiert in aufsteigender Reihenfolge hier. –

40

Sie können es einfach tun können, wie folgt:

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

Bereits gesagt und akzeptiert Antwort von K-ballo – Simon

+7

Ja, aber er legte es in einem zugänglichen Format. –

+1

Dieser ist viel besser! –