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

时间:2019-01-08 11:48:41

标签: java

我创建了一个jsp页面,该页面从用户那里获取ID,然后调用servlet,在该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>\r\n" + 
                            "<tr>\r\n" + 
                            "<th>User Id</th>\r\n" + 
                            "<th>Username</th>\r\n" + 
                            "</tr>\r\n" + 
                            "<tr>\r\n" + 
                            "<td>"+value+"</td>\r\n" + 
                            "<td>"+name+"</td>\r\n" + 
                            "</tr>\r\n" + 
                            "</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  

我不知道该怎么做。

1 个答案:

答案 0 :(得分:4)

您正在为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();
    ...
}