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

Langage Java Discussion :

Méthode "equals" dans une liste.


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 93
    Points : 43
    Points
    43
    Par défaut Méthode "equals" dans une liste.
    Bonjour à tous,

    J'ai un object du genre :
    String id
    String description
    int categorie
    boolean isActif

    Ensuite j'ai une liste contenant plusieurs object.
    J'aimerai pouvoir faire object=malist.equals(monid);
    J'ai tenté de redéfinir la méthode equals mais sans trop de succès.
    Si je ne m'abuse hashcode doit aussi être redéfini mais je ne vois pas trop comment je peux faire.

    Pourriez vous me donner un exemple concret ?

    Merci d'avance,
    Christian

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Bonjour, pour surcharger les méthodes equals et hashcode, tu peux aller voir dans la FAQ :
    - Pourquoi et comment redéfinir la méthode equals() ?
    - Pourquoi et comment redéfinir la méthode hashCode() ?

    Ensuite, je ne vois pas trop ce que tu souhaites faire fonctionnellement, pourrais-tu expliquer? car ton exemple de code n'est pas du tout correct, equals test si "malist" est égale à "monid" et renvoi un booleen, que tu ne peux pas stocker dans un objet.

  3. #3
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object=malist.equals(monid);
    la méthode equals renvoie un booleen, tu comprends donc bien que ce que tu as écrit ne peux pas marcher.

    Si tu veux recuperer un tonObjet par son id, une Map sera mieux adapté.
    De la même manière que tu remplis ta liste, remplis une Map avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taMap.put(TonObjet.getId(), TonObjet);
    Pour récupérer l'objet:


  4. #4
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 93
    Points : 43
    Points
    43
    Par défaut
    Je me suis en fait très mal exprimé, toutes mes excuses.
    En fait la liste est générée par JAXB donc je ne sais pas utiliser un Map.
    Ce que j'aimerai faire c'est retrouver un element par son id dans la liste sans devoir faire une boucle

  5. #5
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    J'ai un object du genre :
    String id
    String description
    int categorie
    boolean isActif
    L'identifiant d'un objet semble être un bon point de comparaison. Autrement dit si deux objets ont le même id, ils sont identiques:

    public boolean equals(Object o) {
    if(o instance of TonObjet) {
    return this.id == ((TonObjet) o).id;
    }
    else{
    return false;
    }

    public int hashcode() {
    return id;
    }
    Si tu ne boucles pas toi même sur la liste, en interne cela se fera de toute manière mais tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    taList.get(taList.indexOf(tonObjet));
    }

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par c-ve Voir le message
    Je me suis en fait très mal exprimé, toutes mes excuses.
    En fait la liste est générée par JAXB donc je ne sais pas utiliser un Map.
    Ce que j'aimerai faire c'est retrouver un element par son id dans la liste sans devoir faire une boucle
    Vu que t'as une liste, pour retrouver par id, il faudra de toutes facons passer par tous les élements et comparer l'id, car il n'existe pas de métainformation dans List classant tes objets par Id (c'est le rôle des maps). Si t'as beacoup de recherches par ID à faire, il serait par contre peut etre intéressant de commencer par transférer tous tes objet dans une map et de l'utiliser:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Map<String,MonType> tempMap = new hashMap<String,MonType>();
    for (MonType unTruc: laListe)
       tempMap.put(unTruc.getId(),unTruc);
    A toit de voir qu'est-ce qui est plus judicieux (parcourir à chaque fois vs faire une fois tous le transfert)

Discussions similaires

  1. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51
  2. Imposer une methode Equals pour une recherche dans une List
    Par petozak dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/10/2006, 10h41

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