Java 所有值都会添加到HashMap中,但只返回最后一个值
在下面的方法demoReadEmail2(String folderName)中,我只得到Java 所有值都会添加到HashMap中,但只返回最后一个值,java,hashmap,jakarta-mail,return-value,Java,Hashmap,Jakarta Mail,Return Value,在下面的方法demoReadEmail2(String folderName)中,我只得到HashMap的最后一个元素。然而,在调试和打印期间,所有值都得到了正确的处理 public Map<String, Object> demoReadEmail2(String folderName) throws MessagingException,IOException { Map<String, Object> stringObjectHashMap = new Ha
HashMap
的最后一个元素。然而,在调试和打印期间,所有值都得到了正确的处理
public Map<String, Object> demoReadEmail2(String folderName) throws MessagingException,IOException {
Map<String, Object> stringObjectHashMap = new HashMap<>();
for (Message message : getUnseenMailsByCurrentDate(folderName)) {
stringObjectHashMap.put("From",message.getFrom()[0]);
stringObjectHashMap.put("To",Arrays.toString(message.getRecipients(Message.RecipientType.TO)));
stringObjectHashMap.put("CC",Arrays.toString(message.getRecipients(Message.RecipientType.CC)));
stringObjectHashMap.put("BCC",Arrays.toString(message.getRecipients(Message.RecipientType.BCC)));
stringObjectHashMap.put("Subject",message.getSubject());
System.out.println(stringObjectHashMap);
}
return stringObjectHashMap;
}
publicmap demoReadEmail2(字符串folderName)抛出MessaginException、IOException{
Map stringObjectHashMap=新建HashMap();
for(消息:getUnseenMailsByCurrentDate(folderName)){
stringObjectHashMap.put(“From”,message.getFrom()[0]);
stringObjectHashMap.put(“To”,Arrays.toString(message.getRecipients(message.RecipientType.To));
stringObjectHashMap.put(“CC”,Arrays.toString(message.getRecipients(message.RecipientType.CC));
stringObjectHashMap.put(“BCC”,Arrays.toString(message.getRecipients(message.RecipientType.BCC));
stringObjectHashMap.put(“Subject”,message.getSubject());
System.out.println(stringObjectHashMap);
}
返回stringObjectHashMap;
}
您在循环中填充映射,在每次迭代中压碎与相同键关联的值。看
你最多只能有。。。地图中每个键都有一个条目(“从”
,“到”
,…)
如果需要跟踪与同一个键关联的多个值,可以使用映射来代替:请参阅本主题。
另一种选择是列出
或将索引信息添加到条目键中:例如From1
。。。(通过使用循环中的索引)。在循环中填充贴图,在每次迭代中压碎与相同键关联的值。看
你最多只能有。。。地图中每个键都有一个条目(“从”
,“到”
,…)
如果需要跟踪与同一个键关联的多个值,可以使用映射来代替:请参阅本主题。
另一种选择是列出
或将索引信息添加到条目键中:例如From1
。。。(通过使用循环中的索引)。问题在于每次执行循环时都会覆盖HashMap属性。实现您想要的一种方法是拥有一个集合
,就像一个列表
,这样:
public List demoReadEmail2(字符串folderName)抛出MessaginException、IOException{
List myList=new ArrayList();
for(消息:getUnseenMailsByCurrentDate(folderName)){
Map stringObjectHashMap=新建HashMap();
stringObjectHashMap.put(“From”,message.getFrom()[0]);
stringObjectHashMap.put(“To”,Arrays.toString(message.getRecipients(message.RecipientType.To));
stringObjectHashMap.put(“CC”,Arrays.toString(message.getRecipients(message.RecipientType.CC));
stringObjectHashMap.put(“BCC”,Arrays.toString(message.getRecipients(message.RecipientType.BCC));
stringObjectHashMap.put(“Subject”,message.getSubject());
添加(stringObjectHashMap);
}
返回myList;
}
问题在于每次执行循环时都会覆盖HashMap属性。实现您想要的一种方法是拥有一个集合
,就像一个列表
,这样:
public List demoReadEmail2(字符串folderName)抛出MessaginException、IOException{
List myList=new ArrayList();
for(消息:getUnseenMailsByCurrentDate(folderName)){
Map stringObjectHashMap=新建HashMap();
stringObjectHashMap.put(“From”,message.getFrom()[0]);
stringObjectHashMap.put(“To”,Arrays.toString(message.getRecipients(message.RecipientType.To));
stringObjectHashMap.put(“CC”,Arrays.toString(message.getRecipients(message.RecipientType.CC));
stringObjectHashMap.put(“BCC”,Arrays.toString(message.getRecipients(message.RecipientType.BCC));
stringObjectHashMap.put(“Subject”,message.getSubject());
添加(stringObjectHashMap);
}
返回myList;
}
映射将键映射到单个值:
Map<String,String> map = new HashMap();
map.put("key1", "value1"); // Puts value1 in map
map.put("key1", "value2"); // Overwrites value1
Map Map=newhashmap();
map.put(“键1”、“值1”);//将值1放入映射中
map.put(“键1”、“值2”);//覆盖值1
所以这取决于你想做什么
如果您想要所有“来源”的列表,请为每个零件创建单独的列表:
List<String> froms = new ArrayList();
froms.add(fromValue);
List froms=new ArrayList();
froms.add(fromValue);
如果需要具有多个值的贴图,请使用多重贴图
谷歌“java教程集合”提供一个不错的教程。地图将一个键映射到一个值:
Map<String,String> map = new HashMap();
map.put("key1", "value1"); // Puts value1 in map
map.put("key1", "value2"); // Overwrites value1
Map Map=newhashmap();
map.put(“键1”、“值1”);//将值1放入映射中
map.put(“键1”、“值2”);//覆盖值1
所以这取决于你想做什么
如果您想要所有“来源”的列表,请为每个零件创建单独的列表:
List<String> froms = new ArrayList();
froms.add(fromValue);
List froms=new ArrayList();
froms.add(fromValue);
如果需要具有多个值的贴图,请使用多重贴图
谷歌“java教程集合”是一个不错的教程。不管有多少消息对象getUnseenMailsByCurrentDate(folderName)
返回。。。您使用的是同一组键,并且地图只支持每个键一个条目。因此,只有最后一条消息将反映在地图中。也许您希望返回一个列表
。为了帮助您思考这个问题,请思考您希望在生成的映射中包含哪些键和值。如果您从“
键”想象多个,那么您所想象的不是地图的工作方式,因此您需要返回并以不同的方式指定问题。我建议返回一个列表
对于一个方法来说应该足够了,然后将一条消息
转换成映射
对于另一个方法来说应该足够了。不管有多少消息
对象getUnseenMailsByCurrentDate(folderName)
返回。。。您使用的是同一组键,并且地图只支持每个键一个条目。仅此而已