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