Trier des valeurs en java

sisimouhamed Messages postés 100 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

j'ai fais un programme java qui affiche des nom de personne et des nombres concernant leur nombre de consultation.pour cela j'aimerais trier les nombres par ordre croissant mais j'arrive pas à bien le faire.Voici ce que j'ai deja fait:
public class Malade implements java.lang.Comparable
{
String nom;
int nbIntox;
Malade (String nom, int nbIntox) {
this.nom = nom;
this.nbIntox = nbIntox;
}

public int compareTo(Object o)
{
int nombre1 = ((Malade) o).nbIntox;
int nombre2 = this.nbIntox;
if (nombre1 > nombre2) return -1;
else if(nombre1 == nombre2) return 0;
else return 1;
}
}
je veut faire le tri dans cette methode:
static void afficherMalades (List liste)
{
for (int i = 0; i < liste.size(); i++)
{
Malade p = (Malade) liste.get(i);
System.out.println(p);

}
}

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Tu dois spécifier les types des classes template !
    Tu auras donc Comparable<Malade> et List<Malade>

    import java.util.Collections; 
    import java.util.List; 
    
    public class Malade implements java.lang.Comparable<Malade> 
    {  
         protected String nom;  
         protected int nbIntox;  
    
         public Malade (String nom, int nbIntox) 
         {  
              this.nom = nom;  
              this.nbIntox = nbIntox;  
         }  
    
         public int compareTo(Malade m)
         {
              if (nbIntox==m.nbIntox)
                   return nom.compareTo(m.nom);
              else return nbIntox-m.nbIntox;
         }
    
         public static void afficherMalades(List<Malade> liste)  
         {                
              Collections.sort(liste); 
               
              for (Malade m : liste)  
              {  
                   System.out.println(m);  
              } 
         }  
    }

    La confiance n'exclut pas le contrôle
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Remarque : ici la liste est triée à chaque fois qu'on appelle afficherMalades.

      On peut éventuellement surcharger la méthode pour ne pas trier la collection lorsqu'on est sûr qu'elle est déjà triée (implémentant SortedSet par exemple) :

      import java.util.SortedSet; 
      
      public static void afficherMalades(SortedSet<Malade> set)  
      {      
           for (Malade m : set)  
           {  
                System.out.println(m);  
           } 
      }
      0
  2. sisimouhamed
     
    bonjour la solution que vous m'avez donné marche bien mais j'aimerais aussi savoir comment fair le trie par ordre alphabetique des nom.Merci de m'aider
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Dans, ce cas, soit tu changes la méthode compareTo, soit tu implémentes un Comparator que tu passes en paramètre de sort
      0