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

1、TreeData:供实体类继承

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:实现工具类

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; } }

构建对象:

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 + '}'; } }

测试案例

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);

 我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3q3q1apgrh8g0


__EOF__

本文作者yangzhuxian Love wzy
本文链接https://www.cnblogs.com/yangzhuxian/p/17551704.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   yangzhuxian  阅读(194)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示