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
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 ...,
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; } }
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 :
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
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; } }
Alors, pour réaliser ce traitement, voici un exemple de comment je fais :
Ca marche, mais je trouve cela super lourd
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); }
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![]()
Partager