我有一个n个路径的列表,我想从中创建一个层次结构(带有对象的树结构(。
例如路径:
/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
└── ...
是否有任何库或方法可以帮助我对层次结构的路径进行排序?还是拆分字符串并比较所有部分并构建自己的层次结构的唯一方法?
你可以
只使用嵌套Map
作为树,将字符串映射到其他嵌套的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
。
如果你想创建和操作树结构,临时库是Jgrapht。