迭代时检查列表中是否有剩余项目

时间:2014-04-17 07:31:00

标签: java

我正在为条件列表进行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;
    }

}

我的问题是有一个更简单的方法来处理:

  • 在列表的迭代
  • 期间检查下一行是否还有一个项目

3 个答案:

答案 0 :(得分:1)

您可以使用普通的旧Iterator来遍历列表,或者只使用hasNext(i, conditions)来检查列表长度(i < conditions.size() - 1

最后,不要遍历整个列表,只需检查最后一个元素JoinPartnull(至少它是你正在做的事情)

@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吗?