使用现有hashmap创建Hashmap

时间:2012-02-26 14:25:08

标签: java hashmap

我创建了一个hashmap,如下所示:

Map<String, String> streetno = new HashMap<String, String>();

streetno.put("3", "Sachin");
streetno.put("2", "Dravid");
streetno.put("1", "Sehwag");
streetno.put("5", "Laxman");
streetno.put("4", "Kohli");

现在我想创建一个新的hashmap,其中上面的hashmap的键变为值,value变为key,如下所示:

Map<String, String> streetname = new HashMap<String, String>();

streetname.put("Sachin", "3");
streetname.put("Dravid", "2");
streetname.put("Sehwag", "1");
streetname.put("Laxman", "5");
streetname.put("Kohli", "4");

我不知道该怎么做..任何人都可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:4)

Map<String, String> streetname = new HashMap<String, String>();

for (Entry<String,String> e : streetno.entrySet()) {
  streetname.put(e.getValue(), e.getKey());
}

这里,for循环遍历原始地图中的所有条目(即键/值对),并将它们插入到第二个地图中,并交换键和值。

检查put()是否返回null可能是个好主意。如果您获得非空值,则表示streetno中的值不是唯一的。由于这是作业,我留给你来弄清楚后果,以及如何最好地处理这个问题。

答案 1 :(得分:2)

完美的你几乎就在那里。现在,您需要迭代第一个哈希映射键并模拟您在这5行中所做的操作:

streetname.put("Sachin", "3");
streetname.put("Dravid", "2");
streetname.put("Sehwag", "1");
streetname.put("Laxman", "5");
streetname.put("Kohli", "4");

提示:迭代地图对你来说可能有点棘手,但通常是这样做的:

for (String key : streetno.keySet()) {
...
}

祝你的作业好运!

答案 2 :(得分:0)

Java 8:

Map<String, String> streetname = 
    streetno.entrySet()
            .stream()
            .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));

注意:

如果您想使用parellelstream()代替stream()三思而后行。这只适用于Map非常大的情况。