290 votes

Java List.contains(Objet dont la valeur du champ est égale à x)

Je veux vérifier si un List contient un objet qui a un champ avec une certaine valeur. Je pourrais utiliser une boucle pour vérifier, mais j'étais curieux de savoir s'il y avait quelque chose de plus efficace.

Quelque chose comme ;

if(list.contains(new Object().setName("John"))){
    //Do some stuff
}

Je sais que le code ci-dessus ne fait rien, c'est juste pour démontrer grossièrement ce que j'essaie d'obtenir.

Aussi, juste pour clarifier, la raison pour laquelle je ne veux pas utiliser une simple boucle est que ce code va actuellement aller dans une boucle qui est dans une boucle qui est dans une boucle. Pour des raisons de lisibilité, je ne veux pas continuer à ajouter des boucles à ces boucles. Je me suis donc demandé s'il existait des alternatives simples (ou presque).

3voto

Juned Ahsan Points 33217

contains la méthode utilise equals en interne. Vous devez donc remplacer la méthode equals pour votre classe en fonction de vos besoins.

En fait, la syntaxe ne semble pas correcte :

new Object().setName("John")

1voto

Magda Points 211

Si vous devez effectuer cette opération List.contains(Object with field value equal to x) de manière répétée, une solution de contournement simple et efficace serait :

List<field obj type> fieldOfInterestValues = new ArrayList<field obj type>;
for(Object obj : List) {
    fieldOfInterestValues.add(obj.getFieldOfInterest());
}

Ensuite, le List.contains(Object with field value equal to x) aurait le même résultat que fieldOfInterestValues.contains(x);

0voto

Pasha Gharibi Points 566

Malgré le SDK JAVA 8, il existe de nombreuses bibliothèques d'outils de collecte qui peuvent vous aider à travailler, par exemple : http://commons.apache.org/proper/commons-collections/

Predicate condition = new Predicate() {
   boolean evaluate(Object obj) {
        return ((Sample)obj).myField.equals("myVal");
   }
};
List result = CollectionUtils.select( list, condition );

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X