Vous avez deux choix.
1. Le premier choix, qui est préférable, est de surcharger la méthode `equals()` dans votre classe Object.
Disons, par exemple, que vous avez la classe Object :
public class MyObject {
private String name;
private String location;
//getters and setters
}
Maintenant, disons que vous ne vous souciez que du nom du MyObject, qu'il doit être unique et que si deux `MyObjects` ont le même nom, ils doivent être considérés comme égaux. Dans ce cas, vous voudriez surcharger la méthode `equals()` (et aussi la méthode `hashcode()`) afin qu'elle compare les noms pour déterminer l'égalité.
Une fois que vous avez fait cela, vous pouvez vérifier si une Collection contient un MyObject avec le nom "foo" en faisant comme suit :
MyObject object = new MyObject();
object.setName("foo");
collection.contains(object);
Toutefois, cette option peut ne pas vous convenir si.. :
- Vous utilisez à la fois le nom et l'emplacement pour vérifier l'égalité, mais vous voulez seulement vérifier si une collection a des `MyObject`s avec un certain emplacement. Dans ce cas, vous avez déjà surchargé `equals()`.
- `MyObject` fait partie d'une API que vous n'avez pas la liberté de modifier.
Si l'un ou l'autre de ces cas se présente, vous choisirez l'option 2 :
2. Écrivez votre propre méthode utilitaire :
public static boolean containsLocation(Collection<MyObject> c, String location) {
for(MyObject o : c) {
if(o != null && o.getLocation.equals(location)) {
return true;
}
}
return false;
}
Vous pouvez également étendre ArrayList (ou une autre collection) et y ajouter votre propre méthode :
public boolean containsLocation(String location) {
for(MyObject o : this) {
if(o != null && o.getLocation.equals(location)) {
return true;
}
}
return false;
}
Malheureusement, il n'y a pas de meilleur moyen de contourner ce problème.