addModule(moduleList, activityList)是一个构造Map的方法,我发现getresult方法循环的时候循环一次却放进去了3个值,这是怎么回事??
知道的请举手哈.
public Map addModule(List moduleList,List activityList)
    {
     Map moduleMap=new HashMap();
     Iterator itr=moduleList.iterator();
     Map actiMap=addActivity(activityList);
     while(itr.hasNext())
     {
     String id=((Module)itr.next()).getId();
     moduleMap.put(id, addActivity(activityList));
     }
     return moduleMap;
    }
    
    public Map addActivity(List activityList)
    {
     Map actiMap=new HashMap();
     Iterator itr=activityList.iterator();
     while(itr.hasNext())
     {
     Activity acti=(Activity)itr.next();
     String id=acti.getId();
     if(acti.getAuditObjects().size()!=0)
     {
     Set auditObjects=acti.getAuditObjects();
     actiMap.put(id, addAudit(auditObjects));
    
     }
     actiMap.put(id,new Integer(0));
     }
     return actiMap;
    }
    
    public Map addAudit(Set auditObjects)
    {
     Map auditMap=new HashMap();
     Iterator itr=auditObjects.iterator();
     while(itr.hasNext())
     {
     String id=((AuditObject)itr.next()).getId();
     auditMap.put(id, new Integer(0));
     }
     return auditMap;
    }
public Map getresult(String filter, List moduleList, List activityList)
    {
        //构造Map
        Map result = addModule(moduleList, activityList);
        List qaIssueList = qaStatDAO.getQAIssuesByFilter(filter);
        for (int i = 0; i < qaIssueList.size(); i++)
        {
            QAIssue qaissue = (QAIssue) qaIssueList.get(i);
            if (StringUtils.isNotBlank(qaissue.getModuleID()) && StringUtils.isNotBlank(qaissue.getActivityID())
                    && StringUtils.isNotBlank(qaissue.getAuditObjectID()))
            {
                ((Map) ((Map) result.get(qaissue.getModuleID())).get(qaissue.getActivityID())).put(qaissue.getAuditObjectID(), new Integer(1));
            }  
            else if (StringUtils.isNotBlank(qaissue.getModuleID()) && StringUtils.isNotBlank(qaissue.getActivityID()))
            {
                Map moduleMap = (Map) result.get(qaissue.getModuleID());
                if (moduleMap.get(qaissue.getActivityID()) instanceof Integer)
                {
                    moduleMap.put(qaissue.getActivityID(), new Integer(1));
                }
            }
        }
        return result;
    }

解决方案 »

  1.   

    检查addModule方法,没必要每个方法都新建一个Hashmap对象
      

  2.   

    在循环里放些System.out.println("--------------")
    标记测试下看看
      

  3.   

    检查addModule方法,没必要每个方法都新建一个Hashmap对象
    现在是用模块ID可以得到一个活动的MAP,然后用一个活动ID可以得到它对应的评审MAP,用一个评审ID可以得到它的值0或者1;如果不用MAP,那怎么对应起来??
      

  4.   

    知道问题所在了:
    public Map addModule(List moduleList,List activityList)
        {
        Map moduleMap=new HashMap();
        Iterator itr=moduleList.iterator();
        Map actiMap=addActivity(activityList);
        while(itr.hasNext())
        {
        String id=((Module)itr.next()).getId();
        moduleMap.put(id, addActivity(activityList));
        }
        return moduleMap;
        }
    问题就出在actiMap这个引用这里,把他写进循环里就OK了.