一步一步实现一个Java树形结构体方法

废话不多说 ,实现一个树型结构体首先得需要一个对象来装载需要的结构数据;

   // id
	private Integer id;
	// 节点名称
	private String name;
	// 选中状态
	private boolean checked;
	// 子节点
	private List<TreeNode> children;
	// 是否可选 true:不可选  // 废弃
	private boolean disabled;
	// logo
	private String icon;

	// 节点是否展开
	private boolean open;
	
	//父id
	private Integer pId;

再把我映射数据库对象得菜单结构体粘贴出来


 @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "menu_id", unique = true, nullable = false)
    private Integer menuId;

    @Column(name = "pid", length = 11)
    private Integer pid;

    @Column(name = "menu_name", length = 30)
    private String menuName;

    @Column(name = "menu_url", length = 50)
    private String menuUrl;

    @Column(name = "menu_type", length = 1)
    private Integer menuType;

    @Column(name = "admin_id", length = 11)
    private Integer adminId;

    @Column(name = "icon", length = 100)
    private String icon;

    @Column(name = "tips", length = 100)
    private String tips;

    @Column(name = "order_show", length = 8)
    private Integer order;

实现方法

     //把当前数据重新规整为符合树型结构的数据结构 
     //menuAllList  是数据库查出来得菜单
        List<TreeNode> resultSet = null;
        if (menuAllList != null && menuAllList.size() > 0) {
            resultSet = new ArrayList<TreeNode>();
            TreeNode node = null;
            for (Menu obj : menuAllList) {
                node = new TreeNode();
                if (obj.getPid() == 0){
                    //夫级别
                    node.setIcon("../../../static/img/parent_menu.png");
                }
                if (obj.getPid() == 0 || !(obj.getPid() > 0)) {
                    node.setId(obj.getMenuId());
                    node.setName(obj.getMenuName());
                    node.setChildren(getChildNode(menuAllList, obj.getMenuId(), _list));
                    node.setChecked(false);
                    node.setpId(obj.getPid());
                    //根据自己业务去填充默认值
                    
                    node.setDisabled(false);
                    resultSet.add(node);
                }
            }
        }

    /**
     * 获取所有权限列表-查询子节点
     */
    private List<TreeNode> getChildNode(List<Menu> list, Integer parentId, List<Integer> _list) {
        List<TreeNode> tem = new ArrayList<TreeNode>();
        TreeNode node = null;
        for (Menu obj : list) {
            if (obj.getPid() != 0 && obj.getPid() > 0) {
                if (obj.getPid() == parentId) {
                    node = new TreeNode();
                    node.setId(obj.getMenuId());
                    node.setName(obj.getMenuName());
                    node.setChildren(getChildNode(list, obj.getMenuId(), _list));
                    node.setChecked(false);
                    node.setIcon("../../../static/img/child_menu.png");
                    if (_list != null && _list.size() > 0) {
                        if (_list.contains(obj.getMenuId())) {
                            node.setChecked(true);
                            node.setOpen(true);
                        }
                    }
                    node.setDisabled(false);
                    tem.add(node);
                }
            }

        }
        if (tem.size() > 0) {
            return tem;
        }
        return null;
    }

这个代码片段是前端实现得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值