上海嘉定网页设计,百度seo快速,wordpress 兼容php7,小型企业网络营销方案/*** 树形表格工具类**authoryanggb*/public classTreeTableUtil {/*** 把列表转换为树结构**paramoriginalList 原始list数据*paramidFieldName 作为唯一标示的字段名称*parampidFieldName 父节点标识字段名*paramchildrenFieldName 子节点(列表)标识字段名*return树结构列表*…/*** 树形表格工具类**authoryanggb*/public classTreeTableUtil {/*** 把列表转换为树结构**paramoriginalList 原始list数据*paramidFieldName 作为唯一标示的字段名称*parampidFieldName 父节点标识字段名*paramchildrenFieldName 子节点(列表)标识字段名*return树结构列表*/public static List list2TreeList(ListoriginalList, String idFieldName, String pidFieldName,String childrenFieldName) {//获取根节点即找出父节点为空的对象List rootNodeList new ArrayList();for(T t : originalList) {String parentId null;try{parentIdBeanUtils.getProperty(t, pidFieldName);}catch (IllegalAccessException | InvocationTargetException |NoSuchMethodException e) {e.printStackTrace();}if(StringUtils.isBlank(parentId)) {rootNodeList.add(0, t);}}//将根节点从原始list移除减少下次处理数据originalList.removeAll(rootNodeList);//递归封装树try{packTree(rootNodeList, originalList, idFieldName, pidFieldName, childrenFieldName);}catch(Exception e) {e.printStackTrace();}returnrootNodeList;}/*** 封装树(向下递归)**paramparentNodeList 要封装为树的父节点对象集合*paramoriginalList 原始list数据*paramkeyName 作为唯一标示的字段名称*parampidFieldName 父节点标识字段名*paramchildrenFieldName 子节点(列表)标识字段名*/private static void packTree(List parentNodeList, ListoriginalList, String keyName,String pidFieldName, String childrenFieldName)throwsException {for(T parentNode : parentNodeList) {//找到当前父节点的子节点列表List children packChildren(parentNode, originalList, keyName, pidFieldName, childrenFieldName);if(children.isEmpty()) {continue;}//将当前父节点的子节点从原始list移除减少下次处理数据originalList.removeAll(children);//开始下次递归packTree(children, originalList, keyName, pidFieldName, childrenFieldName);}}/*** 封装子对象**paramparentNode 父节点对象*paramoriginalList 原始list数据*paramkeyName 作为唯一标示的字段名称*parampidFieldName 父节点标识字段名*paramchildrenFieldName 子节点(列表)标识字段名*/private static List packChildren(T parentNode, ListoriginalList, String keyName, String pidFieldName,String childrenFieldName)throwsException {//找到当前父节点下的子节点列表List childNodeList new ArrayList();String parentIdBeanUtils.getProperty(parentNode, keyName);for(T t : originalList) {String childNodeParentIdBeanUtils.getProperty(t, pidFieldName);if(parentId.equals(childNodeParentId)) {childNodeList.add(t);}}//将当前父节点下的子节点列表写入到当前父节点下(给子节点列表字段赋值)if (!childNodeList.isEmpty()) {FieldUtils.writeDeclaredField(parentNode, childrenFieldName, childNodeList,true);}returnchildNodeList;}}