Java 循环通过hashmap将同一个键的值分组为<;键,列表<;价值观>&燃气轮机;一对

Java 循环通过hashmap将同一个键的值分组为<;键,列表<;价值观>&燃气轮机;一对,java,hashmap,Java,Hashmap,我一直很难想出一种方法来创建一个HashMap,将具有相同键的值分组(放入列表中)。这就是我的意思: 假设我有以下键和值: Value Key *Sorry I got the columns swapped 1 10 1 11 1 12 2 20 3 30 3 31 我想把这些值放到 Hashmap <Integer, List<Integer>>

我一直很难想出一种方法来创建一个HashMap,将具有相同键的值分组(放入列表中)。这就是我的意思:

假设我有以下键和值:

Value     Key  *Sorry I got the columns swapped
1         10 
1         11 
1         12 
2         20 
3         30 
3         31 
我想把这些值放到

Hashmap <Integer, List<Integer>>
Hashmap
因此,它将值分组到具有相同键的列表整数中,如下所示:

(1,{10,11,12}),(2,{20}),(3,{30,31})

现在,密钥和值存储在

Hashmap <Integer, Integer>
Hashmap

我不知道如何循环使用这个Hashmap来创建带有key:List of Values对的新Hashmap。有人对这个话题有很好的理解吗?

用谷歌番石榴代替普通的
地图

Multimap
是一个

…将键映射到值的集合,类似于映射,但其中每个键可能与多个值关联


当然,这一概念也在其他库中得到了实现,番石榴只是我个人的偏好。

您的实际情况不起作用,因为
HashMap
无法存储与
1,10
1,11
中相同密钥的两对


您可以轻松地开发自己的多重映射,但最好的方法是使用已经为此开发的类,framework已经为您准备了一个类。

假设您创建了一个
HashMap
,并且希望按照您要求的方式向其添加一个键值对,您可以使用以下方法:

public void addToMap(HashMap<Integer, List<Integer>> map, Integer key, Integer value){
  if(!map.containsKey(key)){
    map.put(key, new ArrayList<>());
  }
  map.get(key).add(value);
}
public void addToMap(HashMap映射、整型键、整数值){
如果(!map.containsKey(键)){
put(key,newarraylist());
}
map.get(key)、add(value);
}
将此方法用于示例数据:

HashMap<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
addToMap(map, 1, 10); 
addToMap(map, 1, 11);
addToMap(map, 2, 20);
addToMap(map, 3, 30);
addToMap(map, 3, 31);
HashMap map=newhashmap();
addToMap(地图,1,10);
addToMap(地图,1,11);
addToMap(地图,2,20);
addToMap(地图,3,30);
addToMap(map,3,31);

HashMap只为每个整数存储1个值。因此,对其进行迭代只会得到以下值:

Key      Value 
1         12 
2         20 
3         31 
要迭代地图的内容,可以使用entrySet()方法:

for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}
for(Map.Entry:Map.entrySet()){
System.out.println(entry.getKey()+“=”+entry.getValue());
}
要构建列表地图,我建议您这样做:

List<Integer> list = map.get(key);
if(list == null) {
    list = new ArrayList<Integer>();
    map.put(key, list);
}
list.add(value);
List List=map.get(键);
if(list==null){
列表=新的ArrayList();
地图。放置(键、列表);
}
列表。添加(值);

您确定这些值存储在
映射中吗
?由于
HashMap
中的键是唯一的,我打赌您的大部分信息都丢失了。对(Map.Entry e:yourMap){out.println(e.getKey()+“”+e.getValue());}执行一个简单的
循环以检查当前映射的内容。映射有唯一的键。键1是如何重复的?Hashmap不允许一个键有多个值-你不能在Hashmap中发布初始列表,句号。我做了out.print,键和值都按它应该的那样打印出来。contains(键)或map.containsKey(键)