我试图自定义包含ArrayList的方法,我使用Eclipse在TaskCandidateListItemDo类中生成了这些方法。
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result;
if (keyValue == null) {
result += 0;
} else {
result += keyValue.hashCode();
}
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
TaskOverrideItemDo other = (TaskOverrideItemDo) obj;
if (keyValue == null) {
if (other.keyValue != null) {
return false;
}
} else if (!keyValue.equals(other.keyValue)) {
return false;
}
return true;
}
这就是我的使用方式
taskCandidateList = (List<TaskCandidateListItemDo>) namedQuery.list();
for (TaskOverrideItemDo taskOverrideItemDo : validateOverrideListSearchCriteriaDo
.getTaskOverrideItemDoList()) {
if (taskCandidateList.contains(taskOverrideItemDo.getKeyValue())) {
// do some code
}
}
我的名单宣告如下
private List<TaskCandidateListItemDo> taskCandidateList;
//即使keyValue存在,也不会执行if语句内的某些代码。同样,断点不会在equals方法处停止。
最佳答案
尝试:
if (taskCandidateList.contains(taskOverrideItemDo)) {
如果没有
getKeyValue()
,我想它返回字段keyValue
的值(并且您的equals
方法仅比较TaskCandidateListItemDo
,原因如下:if (getClass() != obj.getClass()) {
return false;
}
或者,您可以支持与
keyValue
方法内的equals
类型进行比较。