Оператор «Содержит» просматривает все метры набора и сравнивает значение «хочу» со значением «найдено».Я говорю это очень осторожно.Если вы говорите «joblist.contains (wantjob)», это дает - чтобы исключить некоторую сложность, соответствующую часть:
for (HudsonJob gotjob : joblist)
{
if (wantjob.equals(gotjob))
return true;
}
То есть сравнение - «objectIAmLookingFor.equals (objectInList)»,НЕ "objectInList.equals (objectIAmLookingFor)".
Так что, когда вы ищите в списке HudsonJob's строку, он использует функцию String.equals, а НЕ функцию HudsonJob.equals.А String.equals ничего не знает о HudsonJobs, поэтому он быстро возвращает false.
Есть два способа сделать то, что вы хотите.
Один из способов - изменить функцию HudsonJob.equals на
public boolean equals(Object o)
{
if (o==null || !(o instanceof HudsonJob))
return false;
return this.name.toLowerCase().equals(((HudsonJob)o).name.toLowerCase());
}
Затем написать
HudsonJob wantjob=new HudsonJob();
wantjob.setName("AnExistingJob");
if (existingJobList.contains(wantjob))
... whatever ...
Другой способ состоит в том, чтобы не использовать «содержащий», а вместо этого писатьваша собственная функция поиска, например:
public boolean jobInList(List<HudsonJob> existingJobs, String wantJob)
{
for (HudsonJob gotjob : existingJobs)
{
if (gotjob.name.toLowerCase().equals(wantJob.toLowerCase())
return true;
}
return false;
}
(На самом деле, если вам нужен toLowerCase, было бы лучше сделать wantJob.toLowerCase перед циклом, но что угодно.)
Тогда вы можетескажем
if (jobInList(existingJobs,"AnExistingJob"))
... do something ...