为了账号安全,请及时绑定邮箱和手机立即绑定

如何从文件夹对象列表中递归获取绝对路径?

如何从文件夹对象列表中递归获取绝对路径?

人到中年有点甜 2023-10-13 09:56:49
有文件夹对象列表,我需要将它们连接到绝对路径。每个文件夹都有字段“parentId”(可为空)和“orderNumber”,例如:class Folder {    folderId;    desc;    parentId;    orderNumber;}因此,如果 ParentId == null -> 文件夹是绝对路径中的第一个文件夹,如果不是 -> 我们应该获取父文件夹,依此类推。我就是这样做的,也许有更简单的方法?public static void main(String[] args) {        List<Folder> list = new ArrayList<Folder>();        list.add(new Folder(1, null, "root1"));        list.add(new Folder(3, 2, "child2"));        list.add(new Folder(2, 1, "child1"));        list.add(new Folder(5, 4, "child4"));        list.add(new Folder(6, null, "root2"));        list.add(new Folder(4, 3, "child3"));        Integer fromId = 5;        String path = getAbsolutePath(list, getFolderById(list, fromId));        System.out.println(path);    }    public static String getAbsolutePath(List<Folder> list, Folder folder) {        String path = "";        Integer parentId = folder.getParentId();        if (parentId != null) {            Folder parent = getFolderById(list, parentId);            path += getAbsolutePath(list, parent) + "/";        }        path += folder.getDesc();        return path;    }    public static Folder getFolderById(List<Folder> list, Integer folderId) {        return list.stream().filter(row -> row.getId() == folderId).findFirst().get();    }Output: root1/child1/child2/child3/child4更新:public static void main(String[] args) {        List<Folder> list = new ArrayList<Folder>();        list.add(new Folder(1, null, "root1"));        list.add(new Folder(3, 2, "child2"));        list.add(new Folder(2, 1, "child1"));        list.add(new Folder(5, 4, "child4"));        list.add(new Folder(6, null, "root2"));        list.add(new Folder(4, 3, "child3"));        Map<Integer, Folder> folderMap = list.stream().collect(Collectors.toMap(                Folder::getId, folder -> folder        ));        Integer fromId = 5;        String path = getAbsolutePath(folderMap, folderMap.get(fromId));        System.out.println(path);    }
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

首先,您的代码看起来不错。它编译,它解决了问题,并且它可能不会成为性能瓶颈(除非有很多文件夹)。然而,这对你寻找改进的方法有好处。

为了提高一点效率,我对文件夹进行了预处理,这样我就不必每次都遍历整个列表来通过其 ID 查找父级。只需将文件夹放在 a 中Map<Integer, Folder>(使用 ID 作为键),这样就可以轻松快速地通过 id 找到父文件夹。

为了提高可读性,我还将递归替换为简单的循环。它将更方便查看、更易于调试,甚至性能可能更高。


查看完整回答
反对 回复 2023-10-13
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信