我正在尝试编写一个Java程序来遍历多级散列映射。例如,我有 a HashMap <String, Object>
,其中Object可以是另一个HashMap<String, Object>
。迭代嵌套(多级)散列映射
该散列表的级别可以是n(> 5)。
有人可以给我一个关于如何在java中编写它的提示吗? java提供了一些实用程序吗?
感谢
我正在尝试编写一个Java程序来遍历多级散列映射。例如,我有 a HashMap <String, Object>
,其中Object可以是另一个HashMap<String, Object>
。迭代嵌套(多级)散列映射
该散列表的级别可以是n(> 5)。
有人可以给我一个关于如何在java中编写它的提示吗? java提供了一些实用程序吗?
感谢
您可以通过检查的object
类型是否是HashMap
开始,然后检查其是否length
它有更多的内容或没有。
不知道你的计划的性质什么,这里是递归的一个HashMap中的一般示例:
public void printAll(HashMap<String, Object> map) {
for (Object o : map.values()) {
if (o instanceof HashMap) {
printAll((HashMap<String, Object>) o);
} else {
System.out.println(o.toString());
}
}
}
可能不是100%正确的语法,从内存只是打字。
public void iterate(Map<String, Object> map) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("Key is: " + entry.getKey());
if (entry.getValue() instanceof Map) {
System.out.println("Map found, digging further");
iterate((Map<String, Object>) entry.getValue());
} else {
System.out.println("Leaf found, value is: " + entry.getValue());
}
}
}
这是深度优先迭代。但是,由于java是一种强类型语言,所以嵌套hashmaps和其他类型通常不是一个好主意。大多数情况下,有解决方案不涉及这种黑客行为。
我不是故意偷@大卫弗兰克的雷霆。相反,我给了他所有的荣誉。这是在他的代码稍加修改,你会得到一个平坦的输出地图,包含点分隔的keySet
:
public void iterate(String currentKey, Map<String, Object> map, Map<String, String> out) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getValue() instanceof Map) {
iterate(currentKey + "." + entry.getKey(), (Map<String, Object>) entry.getValue(), out);
} else {
out.put(currentKey + "." + entry.getKey(), entry.getValue().toString());
}
}
}
为了保持尽可能简单,我不是在每个月初移除.
键。
您是否熟悉递归?您将需要它来解决这类问题:http://examples.javacodegeeks.com/core-java/java-recursion-example/ – Brian