使用java代码返回树形结构的damo

1 篇文章 0 订阅

使用java代码返回树形结构的damo

首先我们需要了解的是返回树形结构使用到的算法是递归算法,废话就不多说了下面直接上代码

这是新建用来存放实体类的

@Data
public class MenuTree {


    private String id;

    private String parentId;

    private String name;

    private List children;
}

这是用来测试的main执行方法
 public static void main(String[] args) {
        ArrayList<MenuTree> dtoList=new ArrayList<MenuTree>();
        MenuTree m1=new MenuTree();
        m1.setId("100");
        m1.setName("商务科技");
        dtoList.add(m1);

        MenuTree m2=new MenuTree();
        m2.setId("101");
        m2.setParentId("100");
        m2.setName("深圳总公司");
        dtoList.add(m2);


        MenuTree m3=new MenuTree();
        m3.setId("102");
        m3.setParentId("100");
        m3.setName("长沙总公司");
        dtoList.add(m3);


        MenuTree m4=new MenuTree();
        m4.setId("103");
        m4.setParentId("101");
        m4.setName("研发部门");
        dtoList.add(m4);

        MenuTree m5=new MenuTree();
        m5.setId("104");
        m5.setParentId("101");
        m5.setName("测试部门");
        dtoList.add(m5);

        MenuTree m6=new MenuTree();
        m6.setId("105");
        m6.setParentId("104");
        m6.setName("营销部门");
        dtoList.add(m6);

        MenuTree m7=new MenuTree();
        m7.setId("106");
        m7.setParentId("102");
        m7.setName("市场部门");
        dtoList.add(m7);


        MenuTree m8=new MenuTree();
        m8.setId("107");
        m8.setParentId("102");
        m8.setName("财务部门");
        dtoList.add(m8);

        List<MenuTree> buildByRecursive = buildByRecursive(dtoList);

        System.out.println(buildByRecursive);
    }
这里才是树形结构返回的核心

buildByRecursive方法是将数据进行比较,如果该数据是父节点的话就执行findChildren方法放入到节点中去
findChildren方法是将数据进行判断,如果该数据中的子节点是否还有下一个子节点,就放入数据中去

  /**
     * 使用递归方法建树
     * @param
     * @return
     */
    public static List<MenuTree> buildByRecursive(List<MenuTree> menuTreeDTOs) {
        List<MenuTree> trees = new ArrayList<MenuTree>();
        for (MenuTree MenuTree : menuTreeDTOs) {
            if ("".equals(MenuTree.getParentId()) || MenuTree.getParentId() == null ) {
                trees.add(findChildren(MenuTree,menuTreeDTOs));
            }
        }
        return trees;
    }

    /**
     * 递归查找子节点
     * @param
     * @return
     */
    public static MenuTree findChildren(MenuTree menuTreeDTO,List<MenuTree> menuTreeDTOs) {
        for (MenuTree menuTreeDTO2 : menuTreeDTOs) {
            if(menuTreeDTO.getId().equals(menuTreeDTO2.getParentId())) {
                if(menuTreeDTO.getChildren() == null) {
                    menuTreeDTO.setChildren(new ArrayList<MenuTree>());
                }
                //是否还有子节点,如果有的话继续往下遍历,如果没有则直接返回
                menuTreeDTO.getChildren().add(findChildren(menuTreeDTO2,menuTreeDTOs));
            }
        }
        return menuTreeDTO;
    }

这是返回出来的结果
返回数据

实际开发运用的话使用到的是将数据从数据库读取出来的。不过同理也可以返回树形结构

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值