我正在为条件列表进行Bean验证:
public abstract class BaseMyConditionValidator<T extends Annotation> implements ConstraintValidator<T, List<MyCondition>> {
@Override
public void initialize(T constraintAnnotation) {}
@Override
public boolean isValid(List<MyCondition> conditions, ConstraintValidatorContext context) {
boolean result = true;
if (!conditions.isEmpty()){
int i = 0;
for (MyCondition cond : conditions){
if (cond.getJoinPart() != null){
if (!hasNext(i, conditions)){
return false;
}
}
i++;
}
}
return result;
}
private boolean hasNext(int index, List<MyCondition> conditions){
try {
conditions.get(index + 1);
} catch (Exception e){
return false;
}
return true;
}
}
我的问题是有一个更简单的方法来处理:
答案 0 :(得分:1)
您可以使用普通的旧Iterator
来遍历列表,或者只使用hasNext(i, conditions)
来检查列表长度(i < conditions.size() - 1
)
最后,不要遍历整个列表,只需检查最后一个元素JoinPart
是null
(至少它是你正在做的事情)
@Override
public boolean isValid(List<MyCondition> conditions, ConstraintValidatorContext context) {
return conditions.isEmpty() || conditions.get(conditions.size() - 1).getJoinPart() != null;
}
答案 1 :(得分:0)
实际上,在您的案例/代码中,您无需检查列表中是否还有其他元素。使用for(MyCondition cond:conditions)将迭代条件列表中的所有元素。如果需要检查列表的大小,可以使用contidions.size()。
答案 2 :(得分:0)
当然!
for (int i = 0; i < conditions.size(); i++){
cond = conditions.get(i);
if (cond.getJoinPart() != null){
if (i < conditions.size()){
continue;
} else {
return false;
}
}
}
但我不明白你为什么这样做......你只是想确保.getJoinPart()对每个元素都不等于null吗?