我无法创建排序方法将文件夹和文件放入树结构中。我正在使用复合模式,我有Leaf(文件)和节点(目录)。我还有一份参赛作品清单。我无法弄清楚如何对它们进行排序并创建树形结构 这是输出的例子
org/apache/logging/log4j/core/osgi/is directory !
org/apache/logging/log4j/core/pattern/is directory !
org/apache/logging/log4j/core/selector/is directory !
org/apache/logging/log4j/core/tools/is directory !
org/apache/logging/log4j/core/util/is directory !
Log4j-config.xsd
Log4j-events.dtd
Log4j-events.xsd
Log4j-levels.xsd
META-INF/LICENSE
META-INF/log4j-provider.properties
META-INF/NOTICE
META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
META-INF/services/javax.annotation.processing.Processor
org/apache/logging/log4j/core/AbstractLifeCycle.class
org/apache/logging/log4j/core/AbstractLogEvent.class
org/apache/logging/log4j/core/appender/AbstractAppender.class
我可以确定在哪个目录中只按路径放入条目。我不知道如何正确地做到这一点
我有两个类(复合模式)EntryFile和EntryFolder它们都扩展了Entry,EntryFolder依次有添加Entry对象的方法。
请建议如何做到这一点。我的大脑不想工作
Thx提前。
答案 0 :(得分:0)
如果我理解你的问题,它是"我怎样才能从表示目录的字符串列表转到表示文件系统的树结构"。
如果不提供所有代码,我认为您的解决方案的结构应如下所示:
class EntryFolder implements Entry {
public void addEntryFromPath(String path) {
addEntryFromPathComponents(Arrays.toList(path.split("/"));
}
private void addEntryFromPathComponents(List<String> pathComponents) {
if (pathComponents.isEmpty()) {
return;
} else if (pathComponents.size() == 1) {
addFileEntry(pathComponents.get());
} else {
DirectoryEntry child = getDirectoryEntry(pathComponents.get(0));
if (child == null) {
child = addDirectoryEntry(childName);
}
child.addEntryFromPathComponents(path.subList(0, path.size()));
}
}
}
然后将其与entries
声明为List<String>
一起使用,您将使用以下内容:
FolderEntry root = entries.stream()
.collect(EntryFolder::new, EntryFolder::addEntryFromPath);