当使用Iterartor从Hashmap获取ArrayList时,输出与预期不符



我创建了一个jsp页面,它从用户那里获取id,然后调用servlet,我在其中读取用户输入的值,然后传递给我的方法,该方法返回对象,我作为键值对存储在Hashmap中。

String id = request.getParameter("ManagerId");
    //response.getWriter().println(id);
    services1 s=new services1();
    try {
        //s.getList(id);
        String name="";
        String[] nameArray=new String[10];
        System.out.println("id is ===> "+id);
        Map<Object, Object> map=messageservice.getReportees(id);
        Set s1=map.keySet();
        for (Iterator iterator = s1.iterator(); iterator.hasNext();) 
        {
             name = (String) iterator.next();
             Collection c=map.values();
                String value="";
                for (Iterator iterator1 = c.iterator(); iterator.hasNext();) 
                {
                    value = (String) iterator1.next(); //error in this line        
                    Map<Object, Object> mapData=jiraservice.getJiras(value);
                    //System.out.println(value);

                    System.out.println("returning map");
                    PrintWriter out=response.getWriter();
                    out.println("<html><body><table>rn" + 
                            "<tr>rn" + 
                            "<th>User Id</th>rn" + 
                            "<th>Username</th>rn" + 
                            "</tr>rn" + 
                            "<tr>rn" + 
                            "<td>"+value+"</td>rn" + 
                            "<td>"+name+"</td>rn" + 
                            "</tr>rn" + 
                            "</table></body></html>");
                   }
            }
         }

这是输出:

      User Id   Username
      AR12345   Anagha R
      User Id   Username
      MS12345   Anagha R
      User Id   Username
      at12345   Anagha R
      User Id   Username
      AR12345   Madhusudan S
      User Id   Username
      MS12345   Madhusudan S
      User Id   Username
      at12345   Madhusudan S
      User Id   Username
      AR12345   Amreen Taj
      User Id   Username
      MS12345   Amreen Taj
      User Id   Username
      at12345   Amreen Taj

在我的输出中,它应该只打印

      User Id   Username
      AR12345   Amreen Taj
      User Id   Username
      MS12345   Madhusudhan
      User Id   Username
      at12345   Anagha R  

我不知道应该如何做到这一点。

您正在迭代Map的每个键的Map的所有值,这意味着如果Map有 3 个键值对(从您的输出中可以看出),您将打印每个键值对 3 次。

您只需要一个循环:

Map<Object, Object> map=messageservice.getReportees(id);
Set<Map.Entry<Object,Object> s1=map.entrySet();
for (Iterator<Map.Entry<Object,Object> iterator = s1.iterator(); iterator.hasNext();)  {
    Map.Entry<Object,Object> entry = iterator.next();
    Object name = entry.getKey();
    Object value = entry.getValue();
    ...
}

最新更新