前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java树形工具类 泛型 通用非递归

java树形工具类 泛型 通用非递归

作者头像
用户8200753
发布2023-10-22 15:04:01
2200
发布2023-10-22 15:04:01
举报
文章被收录于专栏:小豪成长日记小豪成长日记

1、TreeData:供实体类继承

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

public class TreeData<T,E> {
    public E id;

    public E pid;

    public List<T> child=new ArrayList<>();

}

2、TreeUtil:实现工具类

代码语言:javascript
复制
import java.util.*;

/**
 * @author YZX
 */

/***
 *
 * @param <T> 数据类 类型
 * @param <E> id pid数据类型
 */
public class TreeUtil<T extends TreeData<T, E>, E> {

    private List<T> treeData;

    private Map<E, List<T>> map;

    private String rootStringValue;

    /***
     *
     * @param data 数据源
     * @param rootStringValue 指定根节点标识,例如系统中pid为“0”的是根节点
     */
    public TreeUtil(List<T> data,String rootStringValue) {
        this.treeData = data;
        this.map = new HashMap<>(data.size());
        this.rootStringValue = rootStringValue;
        for (T datum : data) {
            List<T> ts = this.map.get(datum.pid);
            if (null == ts) {
                ts = new ArrayList<T>();
                map.put(datum.pid, ts);
            }
            ts.add(datum);
        }
    }

    public TreeUtil() {
    }

    /***
     * 构建树
     * @return
     */
    public List<T> getTreeList() {
        List<T> resultData = new ArrayList<>();
        Map<E, List<T>> map = this.map;
        List<T> treeData = this.treeData;
        for (T treeDatum : treeData) {
            E id = treeDatum.id;
            List<T> ts = map.get(id);
            if (null != ts) {
                treeDatum.child = ts;
            }
            if (rootStringValue.equals(String.valueOf(treeDatum.pid))) {
                resultData.add(treeDatum);
            }
        }

        return resultData;
    }
}

构建对象:

代码语言:javascript
复制
public class Dept  extends TreeData<Dept,Integer> {

    public String name;


    public Dept(int id, String name, int pid) {
        super.id = id;
        this.name = name;
        super.pid = pid;
    }

    public Dept() {
    }


    @Override
    public String toString() {
        return "Dept{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pid=" + pid +
                ", child=" + child +
                '}';
    }
}

测试案例

代码语言:javascript
复制
Dept 技术部 = new Dept(2, "技术部", 1);
        Dept 市场部 = new Dept(3, "市场部", 1);
        Dept 产品部 = new Dept(4, "产品部", 1);
        Dept 开发部 = new Dept(5, "开发部", 2);
        Dept 运维部 = new Dept(6, "运维部", 2);
        Dept 投标部 = new Dept(7, "投标部", 3);
        Dept 招标部 = new Dept(8, "招标部", 3);
        Dept 前端部门 = new Dept(9, "前端部门", 5);
        Dept 后端部门 = new Dept(10, "后端部门", 5);
        Dept zzz = new Dept(11, "zzz", 9);
        Dept xxx = new Dept(12, "xxx", 11);

        List<Dept> a=new ArrayList<>();
        a.add(技术部);
        a.add(市场部);
        a.add(产品部);
        a.add(开发部);
        a.add(运维部);
        a.add(投标部);
        a.add(招标部);
        a.add(前端部门);
        a.add(后端部门);
        a.add(zzz);
        a.add(xxx);

TreeUtil<Dept,Integer> treeUtil = new TreeUtil(a,"1");
List<Dept> treeList = treeUtil.getTreeList();
treeList.forEach(System.out::println);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档