ArrayList remove ConcurrentModificationException

代码如下

for (Participant participant : subProcessList) {
	String def_id = participant.getEntityId();
	List list = getParticipantList(service.getPdDefLongIdByStringId(def_id), userInfo.getUserId());
	if (null != list){
		participant.setParticipantList(list);
	} else {
		subProcessList.remove(participant);
	}
}

在运行这段代码是会出现ConcurrentModificationException这个异常,这个异常出现在checkForComodification()这个方法中,当modCount不等于expectedModCount,则抛出ConcurrentModificationException异常(可以去看一下源码)。

解决办法

修改上面的代码,重新定义一个ArrayList,然后把需要删除的Object放入到这个集合中,然后在进行removeAll非操作。修改如下:

// An highlighted block
List<Participant> removeList = new ArrayList<Participant>();
for (Participant participant : subProcessList) {
	String def_id = participant.getEntityId();
	List list = getParticipantList(service.getPdDefLongIdByStringId(def_id), userInfo.getUserId());
	if (null != list){
		participant.setParticipantList(list);
	} else {
		removeList.add(participant);
	}
}
subProcessList.removeAll(removeList);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值