我正在尝试检索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));
});
答案 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");
希望这可以帮到你。