在遍历集合的时候,满足条件的话,需要删除当前元素和相关元素,就容易出现这种错误
for (ChangeResultIncome oldRi : newResultIncome) {
if (oldRi.getLineStatus().equals(AITypeEnum.OFFSET.getCode())) {
inner:for (ChangeResultIncome newRi : newResultIncome) {
if(oldRi.exactMatchCC(newRi)
&& oldRi.getBeginDate().compareTo(newRi.getBeginDate())==0
&& oldRi.getEndDate().compareTo(newRi.getEndDate())==0
&& oldRi.getAmount() == 0-newRi.getAmount()
&& newRi.getLineStatus().equals(AITypeEnum.NEW.getCode())){
newResultIncome.remove(oldRi);
newResultIncome.remove(newRi);
break inner;
}
}
}
}
解决方案为:将需要删除的元素存到一个集合中,最后再统一删除
List<ChangeResultIncome> deleteList = new ArrayList<>();
for (ChangeResultIncome oldRi : newResultIncome) {
if (oldRi.getLineStatus().equals(AITypeEnum.OFFSET.getCode())) {
inner:for (ChangeResultIncome newRi : newResultIncome) {
if(oldRi.exactMatchCC(newRi)
&& oldRi.getBeginDate().compareTo(newRi.getBeginDate())==0
&& oldRi.getEndDate().compareTo(newRi.getEndDate())==0
&& oldRi.getAmount() == 0-newRi.getAmount()
&& newRi.getLineStatus().equals(AITypeEnum.NEW.getCode())){
deleteList.add(oldRi);
deleteList.add(newRi);
break inner;
}
}
}
}
newResultIncome.removeAll(deleteList);