2016-01-02 1 views
1

J'ai une ArrayList remplie de résultats, chaque résultat a un attribut nommé resultValue qui stocke un double. Je veux trier la liste de tableaux en fonction de la valeur de l'attribut ResultValue et pouvoir l'imprimer comme ceci:Vous voulez trier ArrayList en fonction de la valeur de l'attribut

  1. ResultName avec ResultValue

  2. ResultName avec ResultValue

  3. ResultName avec ResultValue

Ma question est: pourquoi cela ne fonctionne-t-il pas? et Comment puis-je le faire fonctionner?

Jusqu'à présent, j'ai fait une méthode compareTo dans ma classe nommée Résultat. Il ressemble à ceci:

public int compareTo(Result otherResult) { 
    if (this.resultValue > otherResult.resultValue()) { 
      return 1; 
     } else if (this.resultValue < otherResult.resultValue()) { 
      return -1; 
     } else { 
      return 0; 
     } 
    } 

Et dans ma classe qui contient la liste de tableaux qui stocke les résultats que je l'ai fait cette méthode:

void typeOutOrderedList() { 
    Collections.sort(resultlist); 
    for (int i = 0; i < resultlist.size(); i++) { 
     Result res = resultlist.get(i); 
     System.out.println(res.competitionStartNumber() + " has the result" + res.resultValue()); 
    } 
} 
+1

Avez-vous fait 'Result' implémenter l'interface' Comparable'? – Vlad

+0

@Vlad public class Résultat implémente Comparable je –

+0

@ A.Bohlund Vous devez changer votre définition de classe 'public class Résultat implémente Comparable ' – schwobaseggl

Répondre

0

Vous avez réinventé la roue; utiliser le JDK pour rendre votre code plus simple et lisible:

public int compareTo(Result otherResult) { 
    return Double.compare(otherResult.resultValue(), resultValue()); 
} 

Notez également l'ordre des paramètres passés à compare() - qui vous donnera l'ordre souhaité (décroissant).