关闭

SET LIST 等向迭代器转换时,迭代器时指向的引用

377人阅读 评论(0) 收藏 举报

前段时间做指标的修改时,遇到了一个问题:如果原指标中存在,现在要修改这个指标,将其删掉,会出先一个异常.有时可以删掉其中的一个,有时一个也删除不了.经过别人的指引,终于解决了,现在将一个问题写下来.

 源程序:

PO中存放的时原指标.VO 中存放的时新指标.将PO VO 进行对比,由此决定操作

 

//branch 1: 删除PO中存在,VO中不存在的指标
    
    for (Iterator i=indPOSet.iterator();i.hasNext();) {
     mpiPO = (MarketPlanIndicatorPO)i.next();
     isExist = false;
     for (Iterator i2=indVOSet.iterator();i2.hasNext();) {
      mpiVO = (MarketPlanIndicatorVO)i2.next();
      if (null != mpiVO.getIndicatorId() && mpiVO.getIndicatorId().longValue() == mpiPO.getIndicatorId().longValue()) {
       isExist = true;
       break;
      }
     }
     if (isExist) {
      //如果指标还存在,更新指标
      ObjectTranslate.transVO2PO(mpiVO,mpiPO);
     } else {
      //如果指标不存在,删除指标
      indPOSet.remove(mpiPO);
     }
    } 

 问题在于indVOSet里的数据经过iterator()操作后Iterator i2只是存放indVOSe的一个引用,同理,indPOSet也是.这样当我们在删除mpiPO时,只是删除了迭代器i的一个引用,并没有真正的删除一个指标.当进行下一轮的比较时.删除引用的部位是指向一个空引用,因此会抛出一个异常.为了解决这个问题,就要防止空应用的比较.为此该用数据比较,而不是迭代器

修改后的源代码:

  //branch 1: 删除PO中存在,VO中不存在的指标
    MarketPlanIndicatorPO[] mpiPOArray = (MarketPlanIndicatorPO[])indPOSet.toArray(new MarketPlanIndicatorPO[0]);
    for (int i=0;i<mpiPOArray.length;i++) {
     mpiPO = (MarketPlanIndicatorPO)mpiPOArray[i];
     isExist = false;
     for (Iterator i2=indVOSet.iterator();i2.hasNext();) {
      mpiVO = (MarketPlanIndicatorVO)i2.next();
      if (null != mpiVO.getIndicatorId() && mpiVO.getIndicatorId().longValue() == mpiPO.getIndicatorId().longValue()) {
       isExist = true;
       break;
      }
     }
     if (isExist) {
      //如果指标还存在,更新指标
      ObjectTranslate.transVO2PO(mpiVO,mpiPO);
     } else {
      //如果指标不存在,删除指标
      indPOSet.remove(mpiPO);
     }
    }

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1862次
    • 积分:46
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档