项目代码
//先根据商户编码获取活动list
Example example= new Example(TPromoActivity.class);
example.createCriteria().andEqualTo("systemMercCode",systemMercCode)
.andNotEqualTo("activityStatus",ActivityStatus.CLOSURE.getCode());
List<TPromoActivity>list= tPromoActivityMapper.selectByExample(example);
if(!Strings.isNullOrEmpty(activityCode)){
//再根据当前活动编码获取叠加活动list2
TPromoActivityVOactivity= selectActivityByCode(activityCode,systemMercCode);
List<TPromoActivityCompVO>list2= tpromoActivityCompService.getList(activity.getId());
//存储叠加活动id
List<Long>activitys= newArrayList<>(list2.size());
activitys.add(activity.getId());
list2.forEach(x->activitys.add(x.getAddedActivityId()));
//去重
for(Iterator<TPromoActivity> iterator= list.iterator();iterator.hasNext();){
TPromoActivityactivityTemp= iterator.next();
if(activitys.contains(activityTemp.getId())){
iterator.remove();
}
}
}
ConcurrentModificationException 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。主要原因是iterator.next()时会检查size
大小,如果改变就会抛出异常
附带几个解决方法 带几个解决方
方法一 迭代移除 iterator.remove();
方法二 对应索引移除// for (int i = 0; i < list.size(); i++){
// Integer integer = list.get(i);
// if (list2.contains(integer)){
// list.remove(integer);
// list.remove(i);
// }
// }
方法三 :
list 集合 使用线程安全方式创建 CopyOnWriteArrayList 移除时 按平时操作移除对象
// while (it.hasNext()) {
// String s = it.next();
// if (s.equals("string2")) {
// strList.remove(s);
// }
// }