[英]Retrieving the keys of Hashmap
我正在尝试检索哈希图的键。
我正在使用哈希映射,如下所示:
HashMap<String, String> inner = new HashMap<String, String>();
HashMap<HashMap<String,String>, String> outer = new HashMap<HashMap<String,String>, String>();
我将值放在两个哈希图中,如下所示:
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));
});
正如我在评论中提到的那样,第二个放置在外部的放置将覆盖第一个放置(两者的键相同)。 除此之外,一种打印所需内容的方法如下:
outer.forEach((k,v) -> {
k.forEach((k1, v1) -> System.out.println(k1 + " " + v1 + " " + v));
});
只需迭代外部哈希图,然后再次迭代每个键(内部哈希图)。
希望能帮助到你。
您可以使用这种方式与我一起工作:
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");
希望这可以帮到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.