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 :

[Collections] Problème de tri


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut [Collections] Problème de tri
    Bonjour j'ai une classe java qui contient un champ long. Elle implemente l'interface Comparable et ma methode compareTo compare les champs long por trier mes objets. Mais l'appelle à Arrays.sort(mon tableau d'objet); ne marche pas? pourquoi?

  2. #2
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Tu renvoies bien la bonne valeur dans ton compareTo() ? (Lis la JavaDoc si tu as un doûte)

    Toine

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    mon extrait de code cé ca:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class Strip extends JPanel implements Comparable{
     
        private Component canvas; 
        public String monVol;
     
     
     
     
        public long POBTnum;
        public long EDATnum;
     
     
        /** Creates a new instance of Strip */
        public Strip(Component c,String s,int i) 
        {
           /*bla bla bla*/
        }
     
       (....)
     
        public int compareTo(Object o) {
            Strip other = (Strip) o;
            if(POBTnum<other.POBTnum) return 1;
            if(POBTnum>other.POBTnum) return -1;
     
            return 0;
        }    
     
     
     
    }

    et je l'utilise comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                maZone.lesStrips.add(strip);//ma zone.lesStrips est une ArrayList contenant des objet Strip
     
                Strip[] mesStrips = new Strip[maZone.lesStrips.size()];
     
                maZone.lesStrips.toArray(mesStrips);           
     
                Arrays.sort(mesStrips);


    Mais ca marche pas

  4. #4
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
    si ton objet est "plus petit" que celui qu'on te passe en paramètre, tu dois renvoyer une valeur négative par exemple.

    Toine

  5. #5
    duj
    duj est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Points : 474
    Points
    474
    Par défaut
    Quand tu dis que ca marche pas, ca veut dire quoi exactement ?:

    • pas trié comme tu veux

      pas trié du tout

      erreur générée à l'execution


    Ben mets déjà un System.out.println dans ta methode compareTo pour voir si elle est bien appelée.

    EDIT: en effet, il semble que tu ai inversé le 1 et le -1
    Parfois, Google fait des miracles

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    je sais mais ca marche pas quand meme

  7. #7
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    C'est normal que ça ne marche pas, ton code est incorrect.

    Toine

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    salut

    En quoi mon code est incorrect ?

    Est ce que je peux avoir plusieurs methode compareTo dans ma classe???

  9. #9
    duj
    duj est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 141
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par duj
    Quand tu dis que ca marche pas, ca veut dire quoi exactement ?:

    • pas trié comme tu veux

      pas trié du tout

      erreur générée à l'execution


    Ben mets déjà un System.out.println dans ta methode compareTo pour voir si elle est bien appelée.

    EDIT: en effet, il semble que tu ai inversé le 1 et le -1
    Parfois, Google fait des miracles

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    OK ca marche

    est ce que je peux avoir plusieurs methode de comparateTo dans une meme classe

  11. #11
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    non

    pourquoi faire?

  12. #12
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par feti2004
    est ce que je peux avoir plusieurs methode de comparateTo dans une meme classe
    bin non, l'interface Comparable ne requiert qu'une seule méthode, qui a le prototype public void compareTo(Object)...

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  13. #13
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Si tu as besoin de trier différement selon certain cas, tu peux utiliser la méthode Arrays.sort(Object[], Comparator)

    Toine

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par onlytoine
    Si tu as besoin de trier différement selon certain cas, tu peux utiliser la méthode Arrays.sort(Object[], Comparator)

    Toine

    Justement comment tu utilises cela? tu as un exemple simple?

  15. #15
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    tu passes ton tableau à l'objet et tu lui passes aussi un Comparator qui permettra le tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Arrays.sort(
         monTableau,
         new Comparator() {
              public int compare(Object o1, Object o2) {
                  // .......
              }
         }
    );
    C'est plus clair ?

    Toine

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par onlytoine
    tu passes ton tableau à l'objet et tu lui passes aussi un Comparator qui permettra le tri :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Arrays.sort(
         monTableau,
         new Comparator() {
              public int compare(Object o1, Object o2) {
                  // .......
              }
         }
    );
    C'est plus clair ?

    Toine
    Cé on ne peut plus clair
    Je te remercie ca ma sauvé

  17. #17
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    Ok, c'est parfait alors !

    Bonne continuation !

    Toine

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

Discussions similaires

  1. Problème de tri sur collection d'enfants hétérogènes
    Par touftouf57 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 04/02/2013, 01h21
  2. [MySQL] Problème de tri
    Par pounie dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/10/2005, 13h09
  3. Problème de tri avec analyse croisée
    Par drthodt dans le forum Access
    Réponses: 2
    Dernier message: 18/10/2005, 16h23
  4. [TToolBar] Problème de tri
    Par titiyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 01/09/2004, 09h21
  5. problème de tri et optimisatiopn
    Par psyco2604 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 13/05/2004, 10h44

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