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 :

Collection et indexOf avec classe personnelle


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut Collection et indexOf avec classe personnelle
    Bonjour,

    J'ai une collection d'objets de type MaClasseAMoi stockés dans un ArrayList ou dans un HashSet.
    Ici pour l'exemple, je l'appelle List1

    En utilisant les EJB3, j'ai une fonction qui me renvoie une autre collection de type d'objet MaClasseAMoi.
    Ici pour l'exemple, je l'appelle List2

    Ensuite, ce que je veux déterminer, si c'est j'ai un ou plusieurs objets de ma List1 qui sont dans ma List2, et ceux qui n'y sont pas vont dans List3.

    Description de la classe : MaClasseAMoi
    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
     
    public class MaClasseAMoi implements Serializable  {
            private static final long serialVersionUID = -8976662148062976904L;
    	private int id;
    	private String login;
    	private String mdp;
     
            public MaClasseAMoi()
            {
            }
     
            public int getId()
            {
                  return this.id;
            }
     
            public void setId(id)
            {
                  this.id = id;
            }
     
            public String getLogin()
            {
                  return this.login;
            }
     
            public void setLogin(login)
            {
                  this.login = login;
            }
     
            public String getMdp()
            {
                  return this.mdp;
            }
     
            public void setMdp(mdp)
            {
                  this.mdp= mdp;
            }
    }
    Pour faire cela, je voulais utiliser la méthode indexOf(Object o) des collections pour retrouver mes objets, mais le pb c'est que si ma collection n'est pas d'un type de base comme String, int, long, etc ...,
    ben il ne me compare pas les valeurs, il me compare uniquement si les objets sont aux mêmes endroits dans la mémoire

    Vu que ce n'est pas ce que je veux, j'ai creusé un peu plus la question, et j'ai vu que je pouvais réaliser des tries sur ce genre d'objets en implémentant comparable à ma classe et en redéfinissant la fonction compareTo

    Donc, j'ai ecrit ceci :
    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
    51
    52
    53
    54
     
    public class MaClasseAMoi implements Serializable, Comparable  {
            private static final long serialVersionUID = -8976662148062976904L;
    	private int id;
    	private String login;
    	private String mdp;
     
            public MaClasseAMoi()
            {
            }
     
            public int compareTo (Object o)
    	{
    		// init des variables
    		int iResul = 1;
    		MaClasseAMoi mO = (MaClasseAMoi) o;
     
    		// compare si c'est les 2 mêmes
    		if(this.getId() == mO.getId())
    			iResul = 0;
     
    		return iResul;
    	}
     
            public int getId()
            {
                  return this.id;
            }
     
            public void setId(id)
            {
                  this.id = id;
            }
     
            public String getLogin()
            {
                  return this.login;
            }
     
            public void setLogin(login)
            {
                  this.login = login;
            }
     
            public String getMdp()
            {
                  return this.mdp;
            }
     
            public void setMdp(mdp)
            {
                  this.mdp= mdp;
            }
    }
    J'ai réessayé en utilisant la méthode indexOf(), mais cela ne change rien, il ne me trouve toujours pas mon objet dans la collection

    Alors, pour réaliser ce traitement, voici un exemple de comment je fais :
    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
     
    Iterator<MaClasseAMoi> it1 = List1.iterator();
    List<MaClasseAMoi> List3 = new ArrayList();
    while(it1.hasNext())
    {
        boolean bPresent = false;
        MaClasseAMoi mcam1 = it1.next();
        Iterator<MaClasseAMoi> it2 = List2.iterator();  
        while(it2.hasNext()
        {
            MaClasseAMoi mcam2 = it2.next();
            if(mcam1.getId() == mcam2.getId())
            {
                  bPresent = true;
                  break;
             }
        }
     
        if(bPresent == false)
           List3.add(mcam1);
    }
    Ca marche, mais je trouve cela super lourd

    J'aimerai savoir s'il est possible de pouvoir retrouver mon objet dans la collection en lui passant un autre objet qui a les mêmes caractéristiques, pour que la comparaison se fasse sur les valeurs et non sur la zone mémoire de celui-ci.
    Je pense qu'il faut écrire sa propre fonction comme avec compareTo, mais là je sèche.

    Merci d'avance pour vos réponses

  2. #2
    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,


    Il faut lire la doc ! indexOf() utilise equals() pour vérifier l'égalité des objets...

    Pourquoi et comment redéfinir la méthode equals() ?

    a++

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Donc il faut redéfinir plutôt la méthode .
    Sinon tu peux utiliser la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static int frequency(Collection<?> c, Object o)
    de la classe Collections qui te renvoie l'occurence de d'un objet.

  4. #4
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    Bonjour adiGuba,
    Bonjour kossistus,

    effectivement, la notion qui me manquait était :
    Il faut lire la doc ! indexOf() utilise equals() pour vérifier l'égalité des objets...
    je mérite un petit coup de fouet

    Donc, après avoir typé correctement mes collections, puis redéfinit comme stipulé dans la doc et dans ce topic la méthode equals
    J'arrive à ce que je veux faire

    Donc merci à vous 2 pour la clarté et la rapidité de vos réponses


  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Par défaut
    Citation Envoyé par CaptainCyd Voir le message
    Bonjour adiGuba,
    Bonjour kossistus,
    Donc merci à vous 2 pour la clarté et la rapidité de vos réponses
    Il n'y a pas de qoui !!
    On se forme et on s'entraide sur le forum .

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

Discussions similaires

  1. [CKEditor] Bouton créant une div avec une class personnelle
    Par Nowwis dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 27/03/2011, 14h03
  2. [Upload] Problème pour gestion d'erreur avec class
    Par allserv dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2005, 13h00
  3. [debutant] affichage ds un JtextArea avec classes independan
    Par tony_big_guy dans le forum Composants
    Réponses: 3
    Dernier message: 27/11/2005, 23h04
  4. Heritage de classe avec classes internes
    Par Regis.C dans le forum Langage
    Réponses: 11
    Dernier message: 27/04/2005, 12h19
  5. Tomcat et classe personnel non trouvée.
    Par swirtel dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 15/02/2005, 14h43

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