我有一个作为目录的字符串的排序列表,我需要显示为树.
例如,如果我有这些字符串:
"folder a/folder b/file 1"
"folder a/folder b/file 2"
"folder a/folder c"
Run Code Online (Sandbox Code Playgroud)
我需要将它们显示为:
folder a
|- folder b
| |- file 1
| |- file 2
|- folder c
Run Code Online (Sandbox Code Playgroud)
我正在考虑浏览列表并跟踪"父文件夹"(即第一个字符串的"文件夹a /文件夹b")并根据"父文件夹"是否相同来构建树.回到父文件夹时,这似乎相当复杂,我想知道是否有人可以推荐一种更简单/更有效的方法来做到这一点?
是否有助于迭代字符串并首先构建一个树,然后在显示它之前迭代树?值得注意的是,所有数据都保存为字符串(此树不会被保存),因此这需要我每次想要显示它时构建树数据结构.
希望有所帮助.构建目录的整个结构.讽刺短名称和缺乏泛型.希望它更具可读性.
public static void main(String[] args) {
ArrayList<String> listOfPaths = new ArrayList<String>();
listOfPaths.add("folder a/folder b/file 1");
listOfPaths.add("folder a/folder b/file 2");
listOfPaths.add("folder a/folder c");
TreeMap structure = new TreeMap();
for (String path : listOfPaths) {
String[] tmp = path.split("/", 2); // [ "folder a/", "folder b/file 1"] for first loops step
put(structure, tmp[0], tmp[1]);
}
print(structure, "");
}
private static void put(TreeMap structure, String root, String rest) {
String[] tmp = rest.split("/", 2);
TreeMap rootDir = (TreeMap) structure.get(root);
if (rootDir == null) {
rootDir = new TreeMap();
structure.put(root, rootDir);
}
if (tmp.length == 1) { // path end
rootDir.put(tmp[0], null);
} else {
put(rootDir, tmp[0], tmp[1]);
}
}
private static void print(TreeMap map, String delimeter) {
if (map == null || map.isEmpty())
return;
for (Object m : map.entrySet()) {
System.out.println(delimeter + "-" + ((Map.Entry)m).getKey());
print((TreeMap)((Map.Entry)m).getValue(), " |" + delimeter);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6089 次 |
| 最近记录: |