Java 将元素添加到HashMap<;字符串,列表>;-。containsKey()始终返回false
我有邮件地址的Java 将元素添加到HashMap<;字符串,列表>;-。containsKey()始终返回false,java,arraylist,hashmap,Java,Arraylist,Hashmap,我有邮件地址的列表,以及用户id(列表中的每个条目看起来像:id:123,邮件:)john@doe.com“) 我想制作一个HashMap,其中每个键都是电子邮件地址的域名,值是来自该域的电子邮件列表: "foo.com": [1] id: 123, mail: a@foo.com [2] id: 345 mail: b@foo.com "bar.com": [1] id: 787, mail: a@bar.co
列表
,以及用户id(列表中的每个条目看起来像:id
:123
,邮件
:)john@doe.com“
)
我想制作一个HashMap
,其中每个键都是电子邮件地址的域名,值是来自该域的电子邮件列表:
"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 = 2
bar = 2
好吧,看来我明白我犯的错误了。当然,
Iterator
部分应该在for
循环之后。我的错。讨厌星期一。如果你能想得那么远,为什么不一步一步地调试它呢?
foo = 2
bar = 2