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 :

Problème avec Collection.sort


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier Avatar de IMPRO
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 94
    Points
    94
    Par défaut Problème avec Collection.sort
    Bonjour,
    je reçois une exception en exécutant ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ArrayList liste = new ArrayList();
    .
    .
      remplissage de la liste
    .
    Comparator c = new ComparateurPoid();
    Collections.sort(liste, c);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Comparison method violates its general contract!
    	at java.util.TimSort.mergeHi(TimSort.java:868)
    	at java.util.TimSort.mergeAt(TimSort.java:485)
    	at java.util.TimSort.mergeForceCollapse(TimSort.java:426)
    	at java.util.TimSort.sort(TimSort.java:223)
    	at java.util.TimSort.sort(TimSort.java:173)
    	at java.util.Arrays.sort(Arrays.java:659)
    	at java.util.Collections.sort(Collections.java:217)
    j'ai remarqué que cette exception et soulevé lorsque ma liste contient plus de 45 éléments sinon sa marche !!
    est ce que quelqu'un peut m'aider à corriger sa svp.
    merci

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le problème vient surement de ton Comparator qui n'est pas cohérent.
    On pourrait voir le code correspondant ?


    a++

  3. #3
    Membre régulier Avatar de IMPRO
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 94
    Points
    94
    Par défaut
    merci.
    en fait, ma liste est rempli d'objet de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ordre(String Depart, String Arrive, int poid, boolean etat)
    et pour la comparaison:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class ComparateurPoid implements java.util.Comparator {
        public int compare(Object o1, Object o2) {
           Ordre ord1 = new Ordre();
           Ordre ord2 = new Ordre();
           ord1 = (Ordre)o1;
           ord2 = (Ordre)o2;
           if(ord2.GetPoid()<ord1.GetPoid()){
               return 1;
           }else{
               return -1;
           }
    en plus de sa, si ma liste contient par exemple 30 élément (Ordre), le Collection.sort marche très bien. Mais au-delà 45 je reçois l'exception

  4. #4
    Membre régulier Avatar de IMPRO
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 94
    Points
    94
    Par défaut
    Problème résolu.
    y'avais un souci dans le comparator effectivement, j'ai oublié une condition:
    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
     
    public class ComparateurPoid implements java.util.Comparator {
        @Override
        public int compare(Object o1, Object o2) {
           Ordre ord1 ;
           Ordre ord2;
           ord1 = (Ordre)o1;
           ord2 = (Ordre)o2;
           if(ord2.GetPoid()<ord1.GetPoid()){
               return 1;
           }else{
               if(ord2.GetPoid()>ord1.GetPoid()){
                return -1;   
               }else{
                   return 0;
               }

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

Discussions similaires

  1. Trier une liste avec Collections.sort(liste)
    Par nakry dans le forum Collection et Stream
    Réponses: 18
    Dernier message: 25/09/2013, 15h52
  2. [Débutant] Problème avec TreeView.Sort()
    Par TheYggdrazil dans le forum C#
    Réponses: 4
    Dernier message: 27/06/2012, 17h12
  3. Réponses: 3
    Dernier message: 16/05/2012, 10h24
  4. Tri de HashMap avec Collections.sort
    Par opensource dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 09/07/2009, 14h27
  5. Probléme avec collection
    Par dv-2008 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 19/05/2008, 13h56

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