Java 迭代时检查列表中是否有剩余项
我正在对一系列条件进行Bean验证:Java 迭代时检查列表中是否有剩余项,java,Java,我正在对一系列条件进行Bean验证: public abstract class BaseMyConditionValidator<T extends Annotation> implements ConstraintValidator<T, List<MyCondition>> { @Override public void initialize(T constraintAnnotation) {} @Override p
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;
}
}
我的问题是,有没有更简单的方法来处理:
- 在列表的迭代过程中检查是否还有下一行中的项目
迭代器来迭代列表,或者代替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;
}
}
}