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

Java Discussion :

Comparateur d'objets java


Sujet :

Java

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 16
    Par défaut Comparateur d'objets java
    Salut,

    je voudrais faire une comparaison des objets de type bourse, alors cette bourse à comme attributs le code et le type Bourse qui est un enum {ord,mov,emp}. Là je cherche à faire un comparateur de façon que si 2 bourses ont le même code je dois les afficher selon cet ordre : les bourses qui ont letype "ord" en premier lieu, puis les bourses "mov" en 2ème lieu et enfin ceux qui ont "emp" moi j'ai fait seulement la comparaison du codemais je sais pas comment les afficher en cas "=" -----> 1)ord, 2)mov, 3)emp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class ComparadorBecasPorCodigo implements Comparator<Bourse>{
     
     public int compare(Bourse b1,Bourse b2){
     
      int res=b1.getCode().compareTo(b2.getCode());
     
      if(res==0){
                ????
     
            }
        }
    }
    Merci.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    le contrat de la méthode compare(a,b) de Comparator dit que :

    • si a<b : on retourne un entier négatif
    • si a==b : on retourne 0
    • si a>b : on retourne un entier positif


    L'entier négatif ou positif peut être tout simplement -1 ou 1, si tu n'as pas l'intention qu'on puisse évaluer la "distance" entre les 2 valeurs comparées. Sinon, c'est une différence (par exemple, pour deux entiers, on pourrait renvoyer a-b).

    Pour comparer les valeurs d'une enum, on peut utiliser la méthode ordinal() de la classe d'enum, qui est le numéro d'ordre de la valeur dans l'enumération, de 0 à nombre de valeurs-1. Mais tu peux également utiliser le fait que 2 valeurs d'enum soit comparables.

    Attention, toutefois, quand on retourne 0 : la valeur 0 indiquant l'égalité, 2 instances que l'on considère comme égales par la méthode compare(), seront considérées comme égales dans les objets qui utilisent des comparateurs, comme TreeSet, par exemple. Ainsi 2 instances non égales par equals(), seront considérées quand même comme égales dans le TreeSet, si compare() renvoie 0 : en conséquence, on ne retrouvera dans le TreeSet que l'une des 2 instances. Il faut donc toujours ajouter une condition sur le cas 0 lorsque les 2 instances comparées ne sont pas réellement égales, et retourner une valeur négative ou positive pour les distinguer.
    Attention, également, à veiller à ce que compare(a,b)==-compare(b,a), pour éviter des tris erratiques.

    Au final, ta méthode peut devenir
    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
    public class ComparadorBecasPorCodigo implements Comparator<Bourse>{
     
      public int compare(Bourse b1,Bourse b2){
     
         int res=b1.getCode().compareTo(b2.getCode());
     
         if(res==0){
            res = b1.getType().compareTo(b2.getType());
     
            if ( res==0 ) {
               // condition de distinction :
               if ( !b1.equals(b2) ) {
                         ... trouver une condition de distinction...
               }
            }
         }
     
         return res;
     
      }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [Info]Projet Orienté Objet Java ou C++
    Par faressam dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2006, 18h40
  2. Réponses: 10
    Dernier message: 10/01/2006, 14h14
  3. [Profiling] Mémoire utilisée par objet java
    Par Bicnic dans le forum Général Java
    Réponses: 2
    Dernier message: 05/01/2006, 09h52
  4. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  5. [SAX] Passer d'objet java en fichier XML?
    Par spoutyoyo dans le forum Format d'échange (XML, JSON...)
    Réponses: 15
    Dernier message: 05/01/2005, 08h31

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