Идея функции заключается в том, что она построит карту, содержащую ключ (путь) и данные, соответствующие этому пути. Вот почему я продолжаю передавать карту, когда она строится.Строение карты с использованием рекурсивной функции
Проблема, кажется, что он попадает в точку, где нет детей нет, но все еще дописывает следующий путь на пути тока:
Вход для пути всегда будет начинаться с «/». Мы получаем для этого детей, которые могут быть level_1A, level_1C, level_1B. Затем я рекурсию по каждому из них, чтобы посмотреть, есть ли у них дети.
Предположим, у level_1A был ребенок level_2A, level_2B. Каким-то образом, алгоритм оказывается втянутым и добавление так:
/level_1A/level_2B/level_2A
Принимая во внимание, следует обрабатывать их по отдельности, как это:
/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