递归生成树结构

实体类

package com.study.entity;

import java.util.List;
import java.util.Objects;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: hcf
 * @Date: 2021/04/14/16:37
 * @Description:
 */
public class Menu {
    private Long id;

    private String pName;

    private Long pid;

    private Integer level;

    private List<Menu> kids;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Menu menu = (Menu) o;
        return Objects.equals(id, menu.id) &&
                Objects.equals(pName, menu.pName) &&
                Objects.equals(pid, menu.pid) &&
                Objects.equals(level, menu.level) &&
                Objects.equals(kids, menu.kids);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, pName, pid, level, kids);
    }

    @Override
    public String toString() {
        return "Menu{" +
                "id=" + id +
                ", pName='" + pName + '\'' +
                ", pid=" + pid +
                ", level=" + level +
                ", kids=" + kids +
                '}';
    }

    public Menu() {
    }


    public List<Menu> getKids() {
        return kids;
    }

    public void setKids(List<Menu> kids) {
        this.kids = kids;
    }

    public Menu(long id, String pName, long pid, int level) {
        this.id = id;
        this.pName = pName;
        this.pid = pid;
        this.level = level;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getpName() {
        return pName;
    }

    public void setpName(String pName) {
        this.pName = pName;
    }

    public Long getPid() {
        return pid;
    }

    public void setPid(Long pid) {
        this.pid = pid;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }
}

工具类

package com.study.entity;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: hcf
 * @Date: 2021/04/14/16:38
 * @Description:
 */
public class MenuTree {
    private List<Menu> menuList = new ArrayList<Menu>();
    public MenuTree(List<Menu> menuList) {
        this.menuList = menuList;
    }
    public static List<Menu> listToTree(List<Menu> list) {
        //用递归找子。
        List<Menu> treeList = new ArrayList<Menu>();
        for (Menu tree : list) {
            //根目录的parentId为-1
            System.out.println(tree);
            if (tree.getPid() == null ) {
                treeList.add(findChildren(tree, list));
            }
        }
        return treeList;
    }

    private static Menu findChildren(Menu tree, List<Menu> list) {
        for (Menu node : list) {
            if (node.getPid().longValue() == tree.getId().longValue()) {
                if (tree.getKids() == null) {
                    tree.setKids(new ArrayList<Menu>());
                }
                tree.getKids().add(findChildren(node, list));
            }
        }
        return tree;
    }
}


运行

package com.study.demo01;

import com.study.entity.Menu;
import com.study.entity.MenuTree;
import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: hcf
 * @Date: 2021/04/09/11:22
 * @Description:
 */
public class Java {
    public static void main(String[] args) {
        List<Menu> menuList = new ArrayList<Menu>();
        /*插入一些数据*/
        menuList.add(new Menu( 1,"assd",-1,0));
        menuList.add(new Menu(2,"as",1,1));
        menuList.add(new Menu(3,"asd",2,2));
        menuList.add(new Menu( 4,"Asfd",-1,0));
        menuList.add(new Menu(5,"asd",4,1));
        /*让我们创建树*/
        List<Menu> menus = MenuTree.listToTree(menuList);
        /*转为json看看效果*/
        String jsonOutput = JSON.toJSONString(menus);
        System.out.println(jsonOutput);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值