2010-11-01 20 views
54

Mögliche Duplizieren:
Sorting an ArrayList of Contactssortiert eine Arraylist basierend auf einem Objektfeld

I DataNode Objekte in einem ArrayList sind zu speichern. Die DataNode Klasse hat ein ganzzahliges Feld namens degree. Ich möchte DataNode Objekte von nodeList in der Reihenfolge degree abrufen. Wie kann ich es tun.

List<DataNode> nodeList = new ArrayList<DataNode>(); 
+0

Mögliche Duplikat http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property –

+2

Auf einer zweiten tought http : //stackoverflow.com/questions/1814095/sorting-an-arlylist-of-contacts kann näher sein –

+0

Siehe auch http://stackoverflow.com/questions/2535124/how-to-sort-an-arraylist- von-Objekten-durch-eine-Eigenschaft –

Antwort

50

Ändern Sie die DataNode-Klasse so, dass sie Comparable interface implementiert.

public int compareTo(DataNode o) 
{ 
    return(degree - o.degree); 
} 

dann benutzen Sie einfach

Collections.sort(nodeList); 
+1

[Vorsicht vor Überlauf!] (Https://stackoverflow.com/q/2728793/1553851) Viel sicherer zu' zurück Integer.compare (diese °, o °); " – shmosel

137

einen benutzerdefinierten Komparator verwenden:

Collections.sort(nodeList, new Comparator<DataNode>(){ 
    public int compare(DataNode o1, DataNode o2){ 
     if(o1.degree == o2.degree) 
      return 0; 
     return o1.degree < o2.degree ? -1 : 1; 
    } 
}); 
+6

Wie wäre es mit der Rückkehr (o1-2 °)? – blitzkriegz

+19

Der richtige Weg, dies zu tun, ist die Art, wie Mark es codiert hat. Ja, die einfache Codezeile funktioniert in 99,9 Prozent der Fälle. Aber Sie werden ein Problem haben, wenn das Ergebnis der Subtraktion eine große Zahl ist, die bewirkt, dass das Bit hoher Ordnung überläuft. Zum Beispiel würden Sie erwarten, dass (Integer.MAX_VALUE - (-10)) positiv ist, aber nicht. – camickr

+0

@camickr Was ist mit o1 ° cpare (o2 °)? –

0

Sie die Bean Comparator können auf jede Eigenschaft in Ihrer benutzerdefinierten Klasse zu sortieren.

Verwandte Themen