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

Java 迭代时检查列表中是否有剩余项,java,Java,我正在对一系列条件进行Bean验证: public abstract class BaseMyConditionValidator<T extends Annotation> implements ConstraintValidator<T, List<MyCondition>> { @Override public void initialize(T constraintAnnotation) {} @Override p

我正在对一系列条件进行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;
    }

}
公共抽象类BaseMyConditionValidator实现ConstraintValidator{
@凌驾
public void initialize(T constraintanotation){}
@凌驾
公共布尔值有效(列表条件、ConstraintValidatorContext上下文){
布尔结果=真;
如果(!conditions.isEmpty()){
int i=0;
用于(MyCondition条件:条件){
if(cond.getJoinPart()!=null){
如果(!hasNext(i,条件)){
返回false;
}
}
i++;
}
}
返回结果;
}
私有布尔hasNext(int索引,列表条件){
试一试{
获取(索引+1);
}捕获(例外e){
返回false;
}
返回true;
}
}
我的问题是,有没有更简单的方法来处理:

  • 在列表的迭代过程中检查是否还有下一行中的项目

您可以使用普通的old
迭代器来迭代列表,或者代替
hasNext(i,条件)
只检查列表长度(
i

最后,不要遍历整个列表,只需检查最后一个元素的
JoinPart
是否为
null
(至少这是您正在做的事情)

@覆盖
公共布尔值有效(列表条件、ConstraintValidatorContext上下文){
返回条件.isEmpty()| | conditions.get(conditions.size()-1).getJoinPart()!=null;
}

事实上,在您的示例/代码中,您不需要检查列表中是否还有其他元素。使用for(MyCondition cond:conditions)将迭代条件列表中的所有元素。如果需要检查列表的大小,可以使用contidions.size()。

当然

        for (int i = 0; i < conditions.size(); i++){
            cond = conditions.get(i);
            if (cond.getJoinPart() != null){
                if (i < conditions.size()){
                    continue;
                } else {
                    return false;
                }
            }
        }
for(int i=0;i

但我不明白你为什么要这么做。。。您只是想确保.getJoinPart()不是每个元素都等于null吗?

我不理解这段代码。肯定hasNext最终会检查当前元素的存在吗?也许你的意思是hasNext(i+1)?这是非常非常奇怪的代码。您有一个
continue
来避免增加
i
,因此每次
cond.getJoinPart()
不是
null
,您都会进一步失去同步(
i
不会随着迭代器的继续而增加)。
是有效的
真正要检查的是什么?为什么这需要如此复杂?你想用这段代码做什么?每次hasNext返回true时,您都会跳过递增i,这是故意的吗?这是有意义的,但问题是如果getJoinPart为null,那么它是确定的,这是列表中的最后一项,如果getJoinPart不为null,那么列表中应该有另一项。否则它将被视为无效。@xybrek,因此基本上所有元素都必须具有
notnull
JointPart,但最后一个元素必须具有
null
        for (int i = 0; i < conditions.size(); i++){
            cond = conditions.get(i);
            if (cond.getJoinPart() != null){
                if (i < conditions.size()){
                    continue;
                } else {
                    return false;
                }
            }
        }