2010-11-01 11 views
54

Duplicar posibles:
Sorting an ArrayList of ContactsOrdenar un ArrayList basado en un campo de objeto

estoy almacenando DataNode objetos en una ArrayList. La clase DataNode tiene un campo entero llamado degree. Quiero recuperar DataNode objetos de nodeList en el orden creciente de degree. Cómo puedo hacerlo.

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

duplicado Posible de http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property –

+2

En una segunda enseñado http : //stackoverflow.com/questions/1814095/sorting-an-arraylist-of-contacts puede estar más cerca de este –

+0

Véase también http://stackoverflow.com/questions/2535124/how-to-sort-an-arraylist- of-objects-by-a-property –

Respuesta

50

Modifique la clase DataNode para que implemente una interfaz Comparable.

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

continuación, sólo tiene que utilizar

Collections.sort(nodeList); 
+1

[¡Cuidado con el desbordamiento!] (Https://stackoverflow.com/q/2728793/1553851) Mucho más seguro que' volver Integer.compare (esto, o, grado); – shmosel

137

Utilice un comparador personalizado:

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

¿qué tal return (o1.degree - o2.degree) ;? – blitzkriegz

+19

La forma correcta de hacerlo es la forma en que Mark lo codificó. Sí, la simple línea de código funcionará el 99.9 por ciento del tiempo. Pero tendrá un problema si el resultado de la resta es un número grande que causa el desbordamiento del bit de orden superior. Por ejemplo, esperaría (Integer.MAX_VALUE - (-10)) ser positivo, pero no lo es. – camickr

+0

@camickr ¿Qué pasa con o1.degree.compare (o2.degree)? –

Cuestiones relacionadas