gpt4 book ai didi

java - 将元素添加到 HashMap - .containsKey() 始终返回 false

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:23 24 4
gpt4 key购买 nike

我有邮件地址的 List<HashMap> 以及用户 ID(列表中的每个条目如下所示:id : 123 , mail : "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 = 1
bar = 1
foo = 1
bar = 1

应该是:

foo = 2
bar = 2

最佳答案

好吧,看来我知道哪里出错了。当然Iterator部分应该在for循环之后。我的错。讨厌星期一。

关于java - 将元素添加到 HashMap<String, List> - .containsKey() 始终返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21672382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com