# TreeHelper **Repository Path**: ludi_git/tree-helper ## Basic Information - **Project Name**: TreeHelper - **Description**: 使用JAVA进行树状数据格式转换 1、获取指定指定树状结构列表的节点数据 2、平铺数据建立成树(将仅有节点和父节点的对象列表转换为含有children的树状结构) 3、将树状结构转换为平铺数据结构(将含有children的树状结构转换为仅有节点和父节点的对象列表) - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2021-01-29 - **Last Updated**: 2022-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TreeHelper #### 介绍 JAVA 1、获取指定指定树状结构列表的节点数据 2、平铺数据建立成树(将仅有节点和父节点的对象列表转换为含有children的树状结构) 3、将树状结构转换为平铺数据结构(将含有children的树状结构转换为仅有节点和父节点的对象列表) ```java package utile; import entity.TreeStructure; import entity.TreeSourceNode; import java.util.ArrayList; import java.util.List; /** * @Description: 树状结构工具类 * @Author: ld * @Date: 2021-01-28 17:55 */ public class TreeHelper { private TreeHelper(){ } /** * 获取指定树状结构中的某节点的详细数据 * @param treeStructureList 指定树状结构列表数据 * @param nodeId 指定节点id * @param 任意参数 * @return 指定id的详细数据 */ public static TreeStructure getNode(List> treeStructureList, String nodeId) { //1、树状结构数据平铺 List> objList = new ArrayList>(); //2、获取指定节点数据 for (TreeStructure obj:convertToObjList(treeStructureList)) { if(nodeId.equals(obj.getId())){ return obj; } } return null; } /** * 将树状结构转换为平铺数据结构(将含有children的树状结构转换为仅有节点和父节点的对象列表) * @param source 树状结构数据列表 * @param 任意类型参数 * @return 平铺数据结构列表 */ public static List> convertToObjList(List> source){ List> outList = new ArrayList<>(); for (TreeStructure tTreeStructure : source) { if (tTreeStructure.getChildren() != null) { outList.add(tTreeStructure); convertToObjList(tTreeStructure.getChildren(), outList); } else { outList.add(tTreeStructure); } } return outList; } /** * 将树状结构转换为平铺数据结构(将含有children的树状结构转换为仅有节点和父节点的对象列表) * @param source 树状结构数据列表 * @param outList 平铺数据结构列表 * @param 任意类型参数 */ public static void convertToObjList(List> source , List> outList){ if(outList==null){ outList = new ArrayList<>(); } for (TreeStructure tTreeStructure : source) { if (tTreeStructure.getChildren() != null) { outList.add(tTreeStructure); convertToObjList(tTreeStructure.getChildren(), outList); } else { outList.add(tTreeStructure); } } } /** * 平铺数据建立成树(将仅有节点和父节点的对象列表转换为含有children的树状结构) * @param sourceNodeList 平铺数据列表 * @param 任意 * @return 树状结构数据 */ public static List> convertToTreeList(List sourceNodeList) { List> destNodeList = new ArrayList>(); //第一步,找出第一级的节点 //1.1 统计所有节点的id List allIds = new ArrayList(); for (T sourceNode : sourceNodeList) { allIds.add(sourceNode.getId()); } //所有父节点找不到对应的都是一级id for (T sourceNode : sourceNodeList) { if (!allIds.contains(sourceNode.getParentId())) { //从每个一级节点,递归查找children TreeStructure destNode = new TreeStructure(); destNode.setId(sourceNode.getId()); destNode.setName(sourceNode.getName()); destNode.setLevel(1); destNode.setParentId(sourceNode.getParentId()); List> myChildes = getChildren(sourceNodeList, destNode); destNode.setChildren(myChildes.isEmpty() ? null : myChildes); destNodeList.add(destNode); } } return destNodeList; } // 递归获取子节点 private static List> getChildren(List sourceNodeList, TreeStructure parentNode) { List> childrenList = new ArrayList>(); for (T sourceNode : sourceNodeList) { if (parentNode.getId().equals(sourceNode.getParentId())) { TreeStructure children = new TreeStructure(); children.setId(sourceNode.getId()); children.setName(sourceNode.getName()); children.setLevel(parentNode.getLevel() + 1); children.setParentId(sourceNode.getParentId()); List> myChilds = getChildren(sourceNodeList, children); children.setChildren(myChilds.isEmpty() ? null : myChilds); childrenList.add(children); } } return childrenList; } } ```