2010-11-01 5 views
54

Possible en double:
Sorting an ArrayList of ContactsTrie un ArrayList basé sur un champ objet

Je stocke DataNode objets dans un ArrayList. La classe DataNode a un champ entier appelé degree. Je souhaite récupérer les objets DataNode de nodeList dans l'ordre croissant degree. Comment puis-je le faire.

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

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

+2

Sur un deuxième tought http : //stackoverflow.com/questions/1814095/sorting-an-arraylist-of-contacts peut être plus proche de cela –

+0

Voir aussi http://stackoverflow.com/questions/2535124/how-to-sort-an-arraylist- of-objects-by-a-property –

Répondre

50

Modifiez la classe DataNode afin qu'elle implémente une interface comparable.

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

alors utilisez simplement

Collections.sort(nodeList); 
+1

[Méfiez-vous du débordement!] (Https://stackoverflow.com/q/2728793/1553851) Beaucoup plus sûr de' return Integer.compare (this.degrief, o.degré); – shmosel

137

Utilisez un comparateur personnalisé:

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

que diriez-vous de retour (o1.degree - o2.degree) ;? – blitzkriegz

+19

La façon correcte de procéder est la façon dont Mark l'a codé. Oui, la simple ligne de code fonctionnera 99,9% du temps. Mais vous aurez un problème si le résultat de la soustraction est un grand nombre provoquant un débordement du bit de poids fort. Par exemple, vous vous attendez à ce que (Integer.MAX_VALUE - (-10)) soit positif, mais ce n'est pas le cas. – camickr

+0

@camickr Qu'en est-il de o1.degree.compare (o2.degree)? –

0

Vous pouvez utiliser le Bean Comparator pour trier sur une propriété dans votre classe personnalisée.

Questions connexes