IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Comment classer une ArrayList?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Par défaut Comment classer une ArrayList?
    Bonjour,

    voici mon souci: j'ai une ArrayList nommée "Pop" (population), contenant des éléments que j'appelle Po (des poissons) , qui ont chacun plusieurs caractéristiques dont leur date de naissance: Po.day_init
    Je voudrais classer cette ArrayList "Pop" de sorte à ce que quand je la parcours, j'ai les dates de naissance (un numero du jour de l'année, de 0 a 360) dans l'ordre:

    Voici comment je parcour la ArrayList Pop:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int p=0; p<Pop_rec.size(); p++) {
    Poissons Po = (Poissons)Pop_rec.get(p);
    System.out.println("naissance = " + Po.day_init);
    }
    Merci d'avance à qui aurait une solution à me proposer.

    PS: J'ai trouver l'existence de la fonction "sort", mais si je comprend bien elle n'existe pas pour les ArrayList.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Code java 1.5
    List<Poisson> poissons = new ArrayList<Poisson>();
    ...// initialisation de la liste.
    java.util.Collections.sort(poissons, new java.util.Comparator<Poisson>() {
      public int compare(Poisson a, Poisson b) {
        if (a == null)
          return 1;
        if (b == null)
          return -1;
        return a.day_init - b.day_init;
      }
    });

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Par défaut
    Merci pour ta réponse rapide, dingoth.
    Mais je ne suis pas sur de bien comprendre ce que fait ce bout de code:
    pourquoi la soustraction des a.day_init - b.day_init;?
    Enfin, l'essentiel c'est que ça marche.
    Donc c'est bien la Arraylist "Poisson" (dans le code que tu propose) qui sera classée selon la date de naissance des poissons?
    et quand je ferais
    f
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    or (int p=0; p<Poisson.size(); p++) {
    Poissons Po = (Poissons)Poisson.get(p);
    System.out.println("naissance = " + Po.day_init);
    j'aurais bien les Po.day_init dans l'ordre?
    bon, je vais faire un essais de toute façon

  4. #4
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Citation Envoyé par timbrochier Voir le message
    pourquoi la soustraction des a.day_init - b.day_init;?
    Enfin, l'essentiel c'est que ça marche.
    Bonjour
    L'essentiel c'est d'avoir compris le principe et comment ça marche et apres bien sûr ça marchera.Si ça marche sans que tu es compris ça serait pas bien .
    La soustraction pour dire que (Poisson a) sera superieur a (Poisson b) si la soustraction est >0 et inferieur sinon(enfin evident )
    @+

  5. #5
    Membre éclairé Avatar de habasque
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Septembre 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 530
    Par défaut Classe comparator
    Une autre manière de coder le tri:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public class MonComparator implements Comparator {
     
        MonComparator() {
        }
     
        public int compare(Object arg0, Object arg1) {
            Poisson p1 = (Poisson ) arg0;
            Poisson p2 = (Poisson ) arg1;
     
            String dateNais1 = ((Integer) p1.getDatenais()).toString();
            String dateNais2 = ((Integer) p2.getDatenais()).toString();
            int result = dateNais1.compareTo(dateNais2);
     
            return result;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public class Tri {
     
        public static void main(String[] args) {
            List<Poisson> poissons = new ArrayList<Poisson>();
     
            Poisson Poisson1 = new Poisson(1998);
            Poisson Poisson2 = new Poisson(1996);
            Poisson Poisson3 = new Poisson(1997);
     
            poissons.add(Poisson1);
            poissons.add(Poisson2);
            poissons.add(Poisson3);
     
            Collections.sort(poissons, new MonComparator());
     
            for (int p = 0; p < poissons.size(); p++) {
                Poisson Po = (Poisson) poissons.get(p);
                System.out.println("naissance = " + Po.getDatenais());
            }
        }
    }

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Ah non ! C'est extrêmement mauvais, ça !

    On travaille avec des valeurs ENTIÈRES de 0 à 360. Il n'y a donc aucune raison de transformer en chaîne, et ce pour deux raisons :
    1. il faut toujours transformer la valeur en chaîne, alors que comparer 2 entiers est bien plus rapide.
    2. Avec ta méthode de tri, la valeur 100 sera avant la valeur 2.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment manipuler une ArrayList
    Par Han Han dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 20/07/2013, 16h41
  2. comment Cloner une ArrayList ?
    Par Raydicule dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 02/02/2011, 11h56
  3. [C# 1.1] Comment retourner une ArrayList avec un WS ?
    Par pi05 dans le forum Services Web
    Réponses: 6
    Dernier message: 09/02/2007, 13h00
  4. Réponses: 1
    Dernier message: 04/07/2006, 23h11
  5. Comment classer les données d'une TStringList ?
    Par cmickyplus dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2005, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo