list转成tree返回前端

参考网址人家是封装的反射,泛型
耻辱,现在不会用他们封装的方法

到处之前excel导入的数据,参照之前写的网址poi低版本导入excel表头

就贴一个control层

  @GetMapping(value = "/all")
    @Log("查询excel测试导入表头不带分页")
    @ApiOperation("查询excel测试导入表头不带分页")
//    @PreAuthorize("@el.check('sysTest:list')")
    public ResponseEntity<PageResult<SysTest>> querySysTest(SysTestQueryCriteria criteria){
        List<SysTest> sysTests = sysTestService.queryAll(criteria);
//        将list处理成tree
        ArrayList<SysTest> roots = new ArrayList<>();
        for (SysTest tree:sysTests){
            String parentlevel = tree.getParentlevel();
            if(StrUtil.isBlank(parentlevel)){
                roots.add(tree);
            }
        }
        sysTests.removeAll(roots);
        // 为根节点添加孩子节点
        for (SysTest tree:roots){
            addChild(tree,sysTests);
        }
//        System.out.println(roots);
        return new ResponseEntity<>(PageUtil.toPage(roots),HttpStatus.OK);
    }

    public void addChild(SysTest tree,List<SysTest> sysTests){
        String headid = tree.getHeadid();
        List<SysTest> children = tree.getChildren();
        for(SysTest cc : sysTests){
            if(headid.equals(cc.getParentlevel())){
                if(children == null){
                    children = new ArrayList<>();
                }
                children.add(cc);
//                写死的时候才知道人家封装说的(我debug发现自己是null,没有初始化)
// 重设目标节点的孩子节点集合,这里必须重设,因为如果目标节点的孩子节点是null的话,这样是没有地址的,就会造成数据丢失,所以必须重设,如果目标节点所在类的孩子节点初始化为一个空集合,而不是null,则可以不需要这一步,因为java一切皆指针
                tree.setChildren(children);
                addChild(cc,sysTests);
            }
        }
    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用递归的方式遍历文件夹,并将文件夹及其子文件夹信息封装成树形结构返回前端。以下是一个示例代码: ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.io.File; import java.util.ArrayList; import java.util.List; @Controller public class FileController { @GetMapping("/tree") @ResponseBody public List<TreeNode> getFileTree() { String rootPath = "D:/files"; // 文件夹根路径 File rootFile = new File(rootPath); if (!rootFile.exists() || !rootFile.isDirectory()) { return null; } TreeNode root = new TreeNode(rootFile.getName(), true); buildFileTree(root, rootFile); List<TreeNode> treeNodes = new ArrayList<>(); treeNodes.add(root); return treeNodes; } private void buildFileTree(TreeNode parent, File parentFile) { File[] files = parentFile.listFiles(); if (files != null && files.length > 0) { for (File file : files) { if (file.isDirectory()) { TreeNode treeNode = new TreeNode(file.getName(), true); parent.addChild(treeNode); buildFileTree(treeNode, file); } else { TreeNode treeNode = new TreeNode(file.getName(), false); parent.addChild(treeNode); } } } } private static class TreeNode { private String name; private boolean directory; private List<TreeNode> children; public TreeNode(String name, boolean directory) { this.name = name; this.directory = directory; } public String getName() { return name; } public boolean isDirectory() { return directory; } public List<TreeNode> getChildren() { return children; } public void addChild(TreeNode child) { if (children == null) { children = new ArrayList<>(); } children.add(child); } } } ``` 通过访问 `/tree` 接口,可以获取文件夹树形结构的数据,前端可以根据这些数据进行展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值