运用递归构造Tree树型结构

1.Tree树形结构
package com.gzhj.common.tree;

/**
 * 类名称:Tree
 * 类描述:树形结构
 * @author oql
 * @date 2022-07-20
 */
public class Tree {
    /**
     * 根据点
     * */
    private String id;
    /**
     * 父节点
     * */
    private String parentId;
    /**
     * 名称
     * */
    private String name;

    public String getId() {
        return id;
    }

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

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

	@Override
    public String toString() {
        return "Tree{" +
                "id='" + id + '\'' +
                ", parentId='" + parentId + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

2. 递归构造树型结构Util

package com.gzhj.common.tree;

import com.jfinal.kit.StrKit;

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

/**
 * 类名称:TreeUtil
 * 类描述:递归构造树型结构
 * @author oql
 * @date 2022-07-20
 */
public class TreeUtil {

    public List<Tree> menuCommon;

    public List<Object> parentList = new ArrayList<Object>();

    public List<Object> menuList(List<Tree> menu,String parentId){
        this.menuCommon = menu;
        for (Tree tree : menu) {
        	if(tree == null){
        		continue;
        	}
            Map<String,Object> mapArr = new LinkedHashMap<String, Object>();
            if(StrKit.notBlank(parentId) && parentId.equals(tree.getParentId())){
                this.setList(mapArr,tree,parentList);
            }
        }
        return parentList;
    }

    public List<?> menuChild(String id){
        List<Object> childList = new ArrayList<Object>();
        for(Tree tree:menuCommon){
        	if(tree == null){
        		continue;
        	}
            Map<String,Object> childArray = new LinkedHashMap<String, Object>();
            //剔除子节点与父节点相同的错误异常数据
            if(tree.getParentId() != null && tree.getParentId().equals(tree.getId())){
                continue;
            }
            if(tree.getParentId() != null && tree.getParentId().equals(id)){
                this.setList(childArray,tree,childList);
            }
        }
           return childList;
    }

    /**
  * 设置树形结构的值
  * @author oql
  * @date 2022-07-20
  */
    private void setList(Map<String,Object> map,Tree tree,List<Object> list){
        map.put("id", tree.getId());
        map.put("name", tree.getName());
        map.put("parentId", tree.getParentId());
        map.put("childList", menuChild(tree.getId()));
        list.add(map);
    }

}

3.main测试

    public static void main(String[] args){

        List<Tree> treeList = new ArrayList<>();
        Tree tr1 = new Tree();
        tr1.setId("01");
        tr1.setParentId("0");
        tr1.setName("顶级");
        treeList.add(tr1);

        Tree tr2 = new Tree();
        tr2.setId("0101");
        tr2.setParentId("01");
        tr2.setName("二级");
        treeList.add(tr2);

        Tree tr3 = new Tree();
        tr3.setId("0102");
        tr3.setParentId("01");
        tr3.setName("二级");
        treeList.add(tr3);

        Tree tr4 = new Tree();
        tr4.setId("010101");
        tr4.setParentId("0101");
        tr4.setName("三级");
        treeList.add(tr4);

        TreeUtil util = new TreeUtil();
        List<Object> objects = util.menuList(treeList, "0");
        System.out.println(objects.toString());
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值