0
該函數的構思是它將構建一個包含鍵(路徑)和與該路徑對應的數據的映射。這就是爲什麼我繼續將地圖傳回,因爲它正在建造。使用遞歸函數構建地圖
的問題似乎是,它得到那裏有沒有孩子的地步,但仍附加下一路徑到當前路徑:
輸入的路徑始終以「/」開頭。我們爲此獲得了兒童,這可能是level_1A,level_1C,level_1B。然後,我會逐一檢查他們是否有孩子。
假設level_1A有子級level_2A,level_2B。不知何故,該算法被逮住了,並追加像這樣:
然而,應該需單獨治療這些,就像這樣:
/level_1A/level_2A
/level_1A/level_2B
這裏就是整個結構會是什麼樣子:
/level_1A data_1A
/level_1A/level_2A data_2A
/level_1A/level_2B data_2B
/level_1B (empty)
/level_1C (empty)
這裏的遞歸方法:
public Map<String, String> getAll(String path, Map<String, String> all) throws Exception {
List<String> children = client.getChildren().forPath(path);
if(children != null && children.size() > 0) {
for(String child: children) {
System.out.println("child: " + child);
if(!path.equals("/")) {
path = path + "/" + child;
} else {
path = path + child;
}
Stat stat = client.checkExists().watched().forPath(path);
if(stat != null && stat.getDataLength() > 0) {
all.put(path, new String(client.getData().forPath(path)));
}
getAll(path, all);
}
}
return all;
}
感謝Beloo!愚蠢的錯誤。 – Matt