将元素添加到HashMap <string,list =“”> - .containsKey()始终返回false </string,>

时间:2014-02-10 08:41:25

标签: java arraylist hashmap

我有List<HashMap>个邮件地址以及用户ID(列表中的每个条目如下:id123mail"john@doe.com"

我想创建一个HashMap,其中每个密钥都是电子邮件地址的域名,value是来自该域的电子邮件列表:

"foo.com":
  [1]
      id: 123,
      mail: a@foo.com
  [2]
      id: 345
      mail: b@foo.com
"bar.com":
  [1]
      id: 787,
      mail: a@bar.com
  [2]
      id: 456
      mail: b@bar.com

为实现这一目标,我会做以下事情。问题是,当我尝试将新列表条目添加到domain条目上的现有列表时,java会将新记录添加到sortedAddresses而不是使用现有记录。我的预测是containsKey()方法总是返回false。

HashMap<String, List> sortedAddresses = new HashMap<String, List>();

        for(HashMap<String, String> r : this.lightUsersList){

            String mail = r.get("email");
            Integer uid = Integer.parseInt(r.get("id"));


            try{
                String[] mailSplit = mail.split("@");
                String domain = mailSplit[1];

                //if domain key doesn't exist, add it to hashmap
                if(!sortedAddresses.containsKey(domain)){
                    List<HashMap> domainAddr = new ArrayList<HashMap>();
                    sortedAddresses.put(domain, domainAddr);
                }

                List<HashMap> domainAddr = sortedAddresses.get(domain);
                sortedAddresses.remove(domain);
                domainAddr.add(r);
                sortedAddresses.put(domain, domainAddr);

            }
            catch(Exception e){
                //to be implemented
                System.out.println("Nie udalo sie dodac adresu " + mail + " do tablicy domenowej (" + e.getMessage() + ")");
            }



                //displaying hashmap summary (source from another SO thread)
                Iterator it = sortedAddresses.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry pairs = (Map.Entry)it.next();
                    System.out.println(pairs.getKey() + " = " + sortedAddresses.get(pairs.getKey()).size());
                    it.remove(); // avoids a ConcurrentModificationException
                } 
        }

输出我得到:

foo = 1
bar = 1
foo = 1
bar = 1

应该是:

foo = 2
bar = 2

1 个答案:

答案 0 :(得分:0)

好吧,似乎我看到了我犯了错误的地方。当然Iterator部分应该在for循环之后。我的错。讨厌星期一。