检索Hashmap的键

时间:2016-11-05 17:31:13

标签: java hashmap

我正在尝试检索hashmap的键。

我正在使用hashmap如下:

HashMap<String, String> inner = new HashMap<String, String>();
HashMap<HashMap<String,String>, String> outer = new HashMap<HashMap<String,String>, String>();

我将值放在hashmap中,如下所示:

inner.put("1", "one");
inner.put("2", "two");
inner.put("3", "three");

outer.put(inner, "outer1");
outer.put(inner, "outer2");

现在我希望输出为

1 one outer1
1 one outer2
2 two outer1
2 two outer2
3 three outer1
3 three outer2

但我无法得到这个。能帮我解决这个问题。

编辑代码:

HashMap<String, String> inner = new HashMap<>();
HashMap<String, String> inner1 = new HashMap<>();
HashMap<HashMap<String, String>, String> outer = new HashMap<>();

outer.put(inner, "outer1");
outer.put(inner1, "outer2");

inner1.put("1", "one");
inner1.put("2", "two");
inner1.put("3", "three");
inner1.put("4", "three");

inner.put("1", "one");
inner.put("2", "two");
inner.put("3", "three");
inner.put("4", "three");

 outer.forEach((k,v) -> {
    k.forEach((k1, v1) -> System.out.println(k1 + " " + v1 + " " + v));
});

2 个答案:

答案 0 :(得分:0)

正如我在评论中所提到的,第二次放置外部将覆盖第一次放置(两者中的关键字相同)。除此之外,打印出你想要的东西的一种方法如下:

outer.forEach((k,v) -> {
    k.forEach((k1, v1) -> System.out.println(k1 + " " + v1 + " " + v));
});

迭代外部哈希映射并再次遍历每个键(内部哈希映射)。

希望它有所帮助。

答案 1 :(得分:0)

你可以用这种方式与我合作:

    for (HashMap<String, String> key : outer.keySet()) {
        for (String key2 : key.keySet()) {
            System.out.println(key2 + " " + key.get(key2) + " " + outer.get(key));
        }

或者这样:

outer.keySet().stream().forEach((key) -> {
    key.keySet().stream().forEach((key2) -> {
        System.out.println(key2 + " " + key.get(key2) + " " + outer.get(key));
    });
});

但是你无法得到你想要的结果,因为你在HashMap中加入了相同的 KEY ,所以HshMap会替换键和值。

如果您显示HashMap的大小,您将找到一个而不是两个:

System.out.println(outer.size());

所以正确的结果

1 one outer2
2 two outer2
3 three outer2

错误的结果

1 one outer1
1 one outer2
2 two outer1
2 two outer2
3 three outer1
3 three outer2

所以,如果你想获得你想要的东西,你应该更改密钥,比如在第一个HashMap中添加另一个东西

inner.put("1", "one");
inner.put("2", "two");
inner.put("3", "three");

outer.put(inner, "outer1");
inner.put("4","three");
outer.put(inner, "outer2");

希望这可以帮到你。