java组装树形结构

思路:

  1. TreeNode实体类设计:id,parentId,name,List<TreeNode>
  2. 组装树形结构思路:
  • 将DB中查询的数据List放到map中,方便查找
  • 根据id和parentId组装数据

树节点:

package org.entity;

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

/**
 * ClassName: TreeNode
 *
 * @description: 树节点
 * @author: LYJ
 * @Create: 2024/11/6 14:27
 * @Version: 1.0
 * @return
 */
public class TreeNode {
    private Long id;//树节点id
    private String name;
    private Long parentId;//父节点id
    private List<TreeNode> children=new ArrayList<>();//孩子节点
	/*
	set/get/无参/有参构造方法/oString 
	*/
}

菜单实体:

package org.entity;

import java.util.Objects;

/**
 * ClassName: Menu
 *
 * @description:菜单实体
 * @author: LYJ
 * @Create: 2024/11/6 14:32
 * @Version: 1.0
 * @return
 */
public class Menu {
    private Long id;
    private String name;
    private Long parentId;
    /**set/get/无参/有参构造方法/oString **/
    
}

组装树形结构:

package org.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * ClassName: TestTreeNode
 *
 * @description:
 * @author: LYJ
 * @Create: 2024/11/6 14:29
 * @Version: 1.0
 * @return
 */
public class TestTreeNode {
    public static void main(String[] args) {


        //从DB中查询的list数据,这里虚拟数据
        ArrayList<Menu> list = new ArrayList<>();
        // 添加测试数据
        list.add(new Menu(1L, "Root1", null));
        list.add(new Menu(2L, "Child1 of Root1", 1L));
        list.add(new Menu(3L, "Child2 of Root1", 1L));
        list.add(new Menu(4L, "Root2", null));
        list.add(new Menu(5L, "Child1 of Root2", 4L));
        list.add(new Menu(6L, "Child2 of Root2", 4L));
        list.add(new Menu(7L, "Child of Child1", 2L));
        Map<Long, TreeNode> map = new HashMap<>();
        //将查询的数据放到map中,方便查找元素
        for (Menu menu : list) {
            TreeNode treeNode = new TreeNode();
            treeNode.setId(menu.getId());
            treeNode.setName(menu.getName());
            treeNode.setParentId(menu.getParentId());
            map.put(menu.getId(), treeNode);
        }
        //组装树形结构
        List<TreeNode> treeNode = new ArrayList<>();
        for (Menu menu : list) {
            Long parentId = menu.getParentId();//父级id
            Long NodeId = menu.getId();//该节点id
            TreeNode treeNodeTemp = map.get(NodeId);//该节点对象
            if(parentId==null){//父级
                treeNode.add(treeNodeTemp);
            }else {//孩子 //找到父级,在父级挂上孩子
                TreeNode parentNode = map.get(parentId);//父节点
                if(parentNode!=null){
                    parentNode.getChildren().add(treeNodeTemp);
                }else {
                    System.out.println("父节点已经被删除了");
                }
            }
        }
        System.out.println("treeNode = " + treeNode);
    }
}

效果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值