原版本:
it = newList.iterator();
while(it.hasNext()){
FileNoUploadDto dto = it.next();
for (int i = 0; i < fileUploadDtos.size(); i++){
if (dto.getValDate().equals(fileUploadDtos.get(i).getValDate())){
it.remove(); // 过滤掉已经上传过估值表的记录
break;
}
}
if (StringUtil.isEmptyList(resultDateList) || !resultDateList.contains(dto.getValDate())) {
it.remove(); //组合树中该日期无组合代码时,则去除该日期
}
}
这里的it是一个迭代Iterator, java.lang.IllegalStateException出现是因为当Iterator执行remove方法时,如果迭代器尚未调用 next 方法,或者在上一次调用 next 方法之后已经调用了 remove 方法,那么再次调用remove方法时就会抛出该异常,很显然当这段代码中的第二个while循环,也就是while(it.hasNext()){ }中,如果循环一次以上并且正好2次或2次以上满足了 StringUtil.isEmptyList(resultDateList) || !resultDateList.contains(dto.getValDate()) 这个条件的话,那么it.remove()就会执行2次,但是这时实际上it.next()只执行了一次,所以就出现上面说的那个异常`,更改代码如下:
it = newList.iterator();
while(it.hasNext()){
FileNoUploadDto dto = it.next();
boolean isNeedRemovedFlag = false;//这里先声明是否需要移除
for (int i = 0; i < fileUploadDtos.size(); i++){
if (dto.getValDate().equals(fileUploadDtos.get(i).getValDate())){
// 过滤掉已经上传过估值表的记录
it.remove();
isNeedRemovedFlag = true;
break;
}
}
if ((StringUtil.isEmptyList(resultDateList) || !resultDateList.contains(dto.getValDate())) && !isNeedRemovedFlag) {
it.remove(); //组合树中该日期无组合代码时,则去除该日期
}
}