Vérifier si une ArrayList contient un objet donné
En supposant que j'ai la classe comme ceci:
class A {
int elementA;
int elementB
}
J'ai aussi un ArrayList
comme ceci: ArrayList<A> listObj
.
Comment puis-je vérifier si la liste contient un objet à l'aide de seulement quelques propriétés des A
? E. g. en considérant seulement les elementA
pour trouver si l'objet newA{elementA}
est déjà dans la liste?
Pour objet A
j'ai défini un equals
méthode, où je considère que seul le elementA
, cependant ce n'est pas suffisant.
- Montrez votre
equals
méthode. - Si vous avez remplacé votre equals() correctement, puis listObj.contient(new A(elemAvalue)) devrait fonctionner. Notez que vous devez également remplacer hashCode uniquement compte des elementA valeur, si ce n'est pas fonctionnellement pertinents pour cet exemple.
if (!days.contains(getDate())) { days.add(getDate()); }
- pour équivaut j'utilise voici l'exemple en tant que source (equals et hashCode)
InformationsquelleAutor Saulius S | 2013-04-29
Vous devez vous connecter pour publier un commentaire.
Le numéro de liste contient() méthode utilise la
equals()
méthode pour évaluer si deux objets sont les mêmes. Donc, vous avez besoin de remplacerequals()
dans votre ClasseA
et également de remplacer lehashCode()
.contains()
utilise leequals
méthode, pasComparable.compareTo()
!elementA
estString
type, puis utilisezisEqual = (this.elementA.equals(((A) object).elementA));
Vous pourriez adapter votre
equals
pour accueillir pour vos besoins, mais vous pouvez également utiliser l'un des puissants de la collection de bibliothèques qui existe déjà, comme commons-collections, Goyave ou lambdaj. Ils ont tous l'itération et le prédicat constructions qui vous permettent de "explorer" vos collections basées sur certains prédicat.Exemple avec les Communes Collections:
La
hashCode()
etequals()
de tableaux sont un peu cassé quand il s'agit de cela (c'est une longue discussion différente pourquoi).Une manière de contourner ce problème est d'utiliser
ArrayList<ArrayList<String>>
au lieu deArrayList<String[]>
, la méthode equals() pour ArrayList sera comme vous l'attendez.Par exemple:
Donnera vrai, comme prévu
Également consulter ci-dessous le lien
Le moyen le plus efficace pour savoir si une ArrayList contient un objet en Java
Je ne voudrais pas remplacer
equals
pour cela. Même si{1, 1}
et{1, 2}
ne peut pas à la fois se produire dans votre liste, les deux objets sont pas égalité.Je voudrais utiliser un
Map
à la place:Tous au-dessus de la solution adaptée à votre question.
Ce que j'aime à vous suggérons voilà!!!!!
Lorsque vous utilisez la collecte, de toujours avoir votre variable du type de données à sa super-classe. qui va vous aider à faire plus de la manipulation et de se convertir à l'une de ses sous-classe.
L'avantage que la mise en œuvre de la Liste peut changer (pour une LinkedList par exemple), sans affecter le reste du code. Ce sera difficile de le faire avec une liste de tableaux, non seulement parce que vous aurez besoin de changer ArrayList pour LinkedList partout, mais aussi parce que vous avez utilisée ArrayList des méthodes spécifiques.
Pour la comparaison de la valeur de l'objet en
arrayList
.Suivez ce Lien.
Comment comparer les attributs des Objets dans une liste de tableaux?
J'espère que cette solution vous aidera.
Grâce