将Java中的路径排序为层次结构

时间:2017-05-17 10:11:36

标签: java path hierarchy

我有一个n路径列表,我想从中创建一个层次结构(带有对象的树结构)。

E.g。 路径:

/src/main/java/tools/mockfile/generator/data/RecordPart.java
/src/main/java/tools/mockfile/generator/Analyzer.java
/src/main/java/tools/mockfile/test/Menu.java
...

小层次结构:

 mockfile
    ├── generator
    │   ├── data
    │   │   └── RecordPart.java
    │   └── Analyzer.java   
    └── test
        ├── Menu.java
        └── ...

是否有任何图书馆或方法可以帮助我对层次结构的路径进行排序? 或者是拆分字符串并比较所有部分并构建我自己的层次结构的唯一方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用嵌套的Map作为树,将字符串映射到其他嵌套的地图。您可以定义一个帮助程序类,只是为了获取正确的类型信息:

class Tree extends HashMap<String, Tree> {}
Tree tree = new Tree();

这样,树已经具备了它所需的所有有用功能。然后,只需迭代路径及其段,并根据需要使用computeIfAbsent创建新分支:

List<String> paths = Arrays.asList(
        "/src/main/java/tools/mockfile/generator/data/RecordPart.java",
        "/src/main/java/tools/mockfile/generator/Analyzer.java",
        "/src/main/java/tools/mockfile/test/Menu.java");

for (String path : paths) {
    Tree node = tree;
    for (String segment : path.split("/")) {
        node = node.computeIfAbsent(segment, s -> new Tree());
    }
}

之后,tree看起来像这样(缩进我的;注意根是空字符串):

 {={src={main={java={tools={mockfile={test={Menu.java={}},
                                      generator={data={RecordPart.java={}}, 
                                                 Analyzer.java={}}}}}}}}}

或者,您可以例如将null放入文件(叶子)而不是另一个空Tree

答案 1 :(得分:0)

如果您希望创建和操作树结构,则ad hoc库是Jgrapht。