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 :

soucis avec collection.contains


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Par défaut soucis avec collection.contains
    Bonjour a tous,
    j'ai une ArrayList<MaClasse>
    MaClasse a un attribu id et un attribu name avec les getters et setter qui vont avec
    MaClasse a aussi cette methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Override
    	public boolean equals(Object obj){
    		System.out.println("Comparaison de 2 objets");
    		MaClasse maClasse = (MaClasse) obj;
    		if(maClasse.getName().equals(name)){
    			System.out.println("ils sont égaux");
    			return true;
    		}
    		else{
    			System.out.println("ils sont differants");
    			return false;
    		}
    	}
    Mon soucis est que lorsque j'utilise la méthode contains sur mon arrayList celle ci n'execute pas ma méthode equals, le débug n'a rien donné non plus :-(
    Si vous avez des pistes je suis preneur

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    On peut voir le code de MaClasse ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Par défaut
    Voici le code complet de MaClasse, elle est on ne peut plus simple
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    public class MaClasse {
     
    	private int id;
    	private String name;
     
    	public MaClasse(){
     
    	}
     
    	public MaClasse(String name){
    		this.name = name;
    	}
     
    	public MaClasse(int id, String name) {
    		super();
    		this.id = id;
    		this.name = name;
    	}
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
    	public String getName() {
    		return name;
    	}
     
    	public void setName(String name) {
    		this.name = name;
    	}
     
    	@Override
    	public boolean equals(Object obj){
    		System.out.println("Comparaison de 2 objets");
    		MaClasse objet= (MaClasse) obj;
    		if(objet.getName().equals(name)){
    			System.out.println("ils sont égaux");
    			return true;
    		}
    		else{
    			System.out.println("ils sont differants");
    			return false;
    		}
    	}
    }
    Le code de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Arraylist<MaClasse> maCollection;
    //chargement de ma collection grace a Hibernate 
    if(maCollection.contains("un text recherché")){
    //un traitement qui n'est jamais executé
    }
    Mon code s'execute sans erreur, le soucis est que le programme n'entre jamais dans le if malgres les bonnes données vu dans le mode debug

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Une remarque : il se pourrait que "name" soit null et ta méthode "equals" se planterait

    Sinon, peux-tu également montrer ton code de test ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    dans getName et setName, tu as une variable pName qui correspond à rien et donc la méthode "equals" rend toujours false

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Une remarque : il se pourrait que "name" soit null et ta méthode "equals" se planterait

    Sinon, peux-tu également montrer ton code de test ?
    name ne peut etre null

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Si, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClasse c = new MaClasse();
    Ton test est à l'envers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    if (maCollection.contains("un text recherché"))
    { 
       //un traitement qui n'a jamais été executé
    }
    il faudrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    if ( ! maCollection.contains("un text recherché"))
    {
       //un traitement qui n'a jamais été executé
    }
    (si c'est bien un traitement à faire une seule fois que tu veux)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Par défaut
    merci pour la réponse,
    j'avais déjà essayé la solution que tu m'a donné mais cela donne toujours le même résultat, le test est fait comme si j'avais pas ré-écris la methode equals. Je me demandais s'il fallait pas que j'implémente une interface ou que j’hérite d'une classe meme si normalement cela devrait fonctionner sans

  9. #9
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ce comportement est normal puisque tu ne passes pas un objet de type MaClasse mais un objet de type String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maCollection.contains("un text recherché")
    // Il faut faire :
    maCollection.contains(new MaClasse("un text recherché"))
    Je suppose que contains() doit utiliser la méthode equals() de l'objet reçu en paramètre...


    a++

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Je suppose que contains() doit utiliser la méthode equals() de l'objet reçu en paramètre...
    Dans le cas d'une ArrayList, oui. Ça va de soi et c'est ce que dit la doc. (Correction : la doc ne le dit pas mais, par élimination, on peut logiquement conclure qu'il n'existe pas d'autre moyen de faire ce que dit la doc.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Par défaut
    Merci adiGuba ta solution est la bonne !

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

Discussions similaires

  1. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 19h13
  2. SOucis avec une reequete imbriquee
    Par Ni4k dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/03/2004, 09h56
  3. souci avec un algorithme
    Par slider16 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2004, 18h17
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 17h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 13h16

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