我有一个列表,每个对象都可以包含子元素。我想递归地遍历每个元素,如果元素包含一些错误的值,则更新它。如果doUpdate方法更新了元素,则返回true。
ddmUpdated参数在开始时为false
boolean updateRecursive(DDMFormField dDMFormField, List<DDMFormField> dDMFormFieldList, boolean ddmUpdated){
if(!ddmUpdated){
ddmUpdated = doUpdate(dDMFormField);
}else{
doUpdate(dDMFormField);
}
if(!dDMFormFieldList.isEmpty()){
for (DDMFormField fl: dDMFormFieldList){
ddmUpdated = updateRecursive(fl,fl.getNestedDDMFormFields(), ddmUpdated);
}
}
return ddmUpdated;
}
最后,如果我对列表的至少一个元素做了一些更改,我希望返回true。我不知道为什么,即使doUpdate返回true,递归继续ddmUpdated=true,它也总是返回false。
有人能提出一个保持真正价值的正确方法吗?
您正在覆盖ddmUpdated中递归调用的返回值。确保只有在值为true时才覆盖它,如下所示:
boolean updateRecursive(DDMFormField dDMFormField, List<DDMFormField> dDMFormFieldList, boolean ddmUpdated){
if(!ddmUpdated){
ddmUpdated = doUpdate(dDMFormField);
}else{
doUpdate(dDMFormField);
}
if(!dDMFormFieldList.isEmpty()){
for (DDMFormField fl: dDMFormFieldList){
ddmUpdated = ddmUpdated | updateRecursive(fl,fl.getNestedDDMFormFields(), ddmUpdated);
}
}
return ddmUpdated;
如果其中一个参数为true,则或运算符|
将返回true。