gpt4 book ai didi

java - 如何使用递归将对象添加到已知路径的父级中

转载 作者:行者123 更新时间:2023-12-01 15:01:28 24 4
gpt4 key购买 nike

我遇到了一些无法解决的问题。我正在使用由简单模型 Directory.java

实现的目录来模拟文件系统
public class Directory  {

public Directory(String name, List<Directory> directory) {
this.name = name;
this.directory = directory;
}

private String name;

private List<Directory> directory;

我的问题是我必须将新目录添加到具有指定路径的现有目录中(例如 test/test2/newdir)。我试图使用递归,但它不能解决我的问题,因为当我更改目标目录时,根目录保持不变。有人可以帮我吗?

翁德雷吉

编辑:我的递归方法

private static Directory _digIn(Directory dir, List<String> path, int depth) {
if (depth < path.size()) {
if (dir.getDirectory() != null) {
for (Directory d : dir.getDirectory()) {
if (d.getName().equalsIgnoreCase(path.get(depth))) {
return _digIn(d, path, ++depth);
}
}
}
} else {
return dir;
}
return null;
}

此方法返回我所需的目录,我可以向其中添加新目录,但此更改不会反射(reflect)在根目录中。

EDIT2:我的插入方法

public static void insertNewObject(Directory dirToSave, List<String> path) {
Root root = getRoot(xmlFile);
Directory dir = _digIn(root.toDir(), path, 0);
if (dir.getDirectory() != null) {
dir.getDirectory().add(dirToSave);
} else {
List<Directory> dirList = new ArrayList<>();
dirList.add(dirToSave);
dir.setDirectory(dirList);
}
}

最佳答案

问题是,当您执行 root.toDir() 调用时,您很可能创建一个 new Directory 这是一个不同的对象,因此对此 Directory 所做的所有更改都不会反射(reflect)在 root 中。

我建议两个选项来解决这个问题:

1.使您的Root包含最顶层的Directory

    class Root{
Directory rootDir;
public Directory toDir(){
return rootDir;
}
}

这将返回对存储在 root 内的 Directory 对象的引用,因此当您执行插入方法时,此 Directory 将被更改并且更改将反射(reflect)在 root

2.创建一个 Directory.createRoot() 方法,该方法将为您提供一个新的 root 元素。

在这种情况下,您可以使用当前的 root.toDir() 方法,该方法仍将返回最顶层的 Directory (dir)。在对其调用插入方法后,只需执行 root = dir.createRoot(); 这可能会为您提供一个新的 root ,其中包含有关该目录的最新数据结构。

关于java - 如何使用递归将对象添加到已知路径的父级中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com