Java ConcurrentModificationException万能解决方案

来源:互联网 发布:u盘查杀软件 编辑:程序博客网 时间:2024/06/05 07:59

在遍历集合的时候,满足条件的话,需要删除当前元素和相关元素,就容易出现这种错误


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);


阅读全文
0 0
原创粉丝点击