Trier une arraylist [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
15 novembre 2010
-
 coffee -
Bonjour,
j'ai un petit souci pour trier une arraylist, je m'explique j'ai une classe joueur :

public class Joueur {

int reg;
int departement;
int point;
String nom;
.......
}

puis une autre classe ou j'ai une arraylist de la classe Joueur

public class execl{

ArrayList Joueur=new ArrayList();
........
}

J'ajoute plusieurs Joueur à mon ArrayList avec la methode add(), puis je voudrais trier mon arraylist par ordre decroissant des points de chaque joueur, mais c'est je ne sais pas comment fair.

Est ce que quelqu'un pourrait m'aider??

Merci
occhi.

7 réponses

Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
Bonjour,

Il faut que ta classe joueur implémente l'interface IComparable.
Dans ta classe "joueur", il faudrait que tu crées une méthode compareTo(Joueur autreJoueur) qui renvoie 1 si le joueur "This" est plus grand que le joueur autreJoueur (grand au sens que tu désires), 0 si les joueurs sont à égalité, -1 sinon.

Ensuite, il te suffit, avec ton arraylist (que je n'appellerais pas Joueur à ta place ! Tu donnes le même nom qu'à la classe Joueur, ce n'est pas une bonne idée), d'appeler sa méthode .Sort()

Ce qui donnerait quelque chose comme ça pour la classe Joueur :
public class Joueur Implements IComparable {

int reg;
int departement;
int point;
String nom;
.......

   Public Int CompareTo(Joueur autreJoueur)
   {
      int resultat;
      if (this.point > autrejoueur.point)
         resultat = 1;
      if (this.point < autrejoueur.point)
         resultat = -1;
      if (this.point == autrejoueur.point)
         resultat = 0;
      return resultat;
   }
} 
Et comme ça pour ton arraylist :
public class execl{

ArrayList LesJoueurs = new ArrayList();
........
LesJoueurs.Add();
LesJoueurs.Add();
LesJoueurs.Add();
LesJoueurs.Add();
........
LesJoueurs.Sort();
} 
Si tu veux trier autrement, modifie juste la fonction CompareTo() pour mettre ce que tu veux dedans.

Xavier
38
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 84172 internautes nous ont dit merci ce mois-ci

Voilà une réponse pour ta question (même si en 3 ans tu as surement eu le temps de la trouver tout seul). J'ai repris ça de mon code, je te laisse l'adapter pour ta classe Joueur.

Premièrement, essaie d'utiliser la généricité:

ArrayList<UserCreateInfo> lst = new ArrayList<UserCreateInfo>(usersToCreate);


Ensuite tu peux créer des comparateurs en implémentant l'interface Comparator puis tu peux l'utiliser avec la méthode Collections.sort:

Collections.sort(lst, new Comparator<UserCreateInfo>()
{
    public int compare(UserCreateInfo o1, UserCreateInfo o2)
    {
         return o1.getUsername().compareTo(o2.getUsername());
    }
});


Ceci permet d'avoir plusieurs comparateurs différent. Evidemment chaque comparateur peut être stocké dans des variables statiques pour ne pas les créer à chaque fois.
Topic ancien mais il est évident qu'il manque une réponse au premier post.
Pour avoir une liste triée, autant réduire le nombre d'actions plutôt que de faire plusieurs fois la même chose. Ici on fait 3 actions:
1. Récupération des enregistrements.
2. Ajout des enregistrements dans la liste.
3. Trie de la liste selon une variable d'un objet java.

N'oubliez pas que SQL peux le faire pour vous, avec la bonne vielle méthode ORDER BY en fin de requête sur le champs qui vous intéresse. Comme ça on diminue le nombre d'opérations :
1. Récupération des enregistrements triés.
2. Ajout des enregistrements dans la liste.
Et on gagne en temps d'exécution (ORDER BY moins long qu'un ArrayList.sort()).

Ensuite, si l'intérêt du topic était juste de connaitre une méthode pour trier une ArrayList, ma technique est inutile mais ce n'est pas clairement spécifié dans le post initial.

@+
Reivax962
Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
Bonjour,

Vous avez raison, sauf... que rien n'indique dans le message initial que l'on a une base de données ! ;)

Xavier
Ca ne répond en rien à la question posée.
Messages postés
8
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
15 novembre 2010
3
Merci Reivax pour ton aide mais j'ai une autre petite question.
Le truc c'est que je veux pas seulement pouvoir trier par ordre de point mais aussi par ordre alphabetique et autre...,
donc enfaite il faudrait que j'ai plusieurs methodes comparto() dans la meme class ???!!!!
Ou est ce que je peux spécifier la methode de trie à utiliser en appelant Sort()??

Si qql1 peut m'aider, merci à lui.

Francis.
Messages postés
801
Date d'inscription
vendredi 20 octobre 2006
Statut
Contributeur
Dernière intervention
4 septembre 2011
150
Salut,

Il existe plusieur algorithmes de tri. En voici quelques'un.

@Bientôt
Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
Bonjour,

Je n'ai pas l'impression que le Sort() permette de spécifier d'autres arguments.
Reste donc la possibilité évoquée par vlmath, à savoir de coder toi-même ton algorithme de tri...

Désolé :-/

Xavier
Messages postés
8
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
15 novembre 2010
3
ok, merci xavier, ta solution marche nickel.

Francis