我正在嘗試編寫一個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