步骤:
1、将全部列表设置成Map<Long, List<Obejct>> map的格式,方便查看每个父级对应的子列表,减少循环次数
2、对这个map进行递归,重新进行级联树的集合调整,将子集放置在对应的childs里面。
public DynamicDeployTable selectDynamicDeployTableTree(String formCode) {log.info("selectDynamicDeployTableTree:{}", formCode);// 顶级父节点DynamicDeployTable returnDynamicDeployTable = null;List<DynamicDeployTable> dynamicDeployTableList = selectDynamicDeployTableList(formCode);Map<Long, List<DynamicDeployTable>> dynamicDeployTableMap = new HashMap<>();for (DynamicDeployTable dynamicDeployTable : dynamicDeployTableList) {Long parentId = dynamicDeployTable.getParentId();if (parentId == 0L) {returnDynamicDeployTable = dynamicDeployTable;continue;}List<DynamicDeployTable> dynamicDeployTables = dynamicDeployTableMap.get(parentId);if (ObjectUtil.isNotEmpty(dynamicDeployTables)) {dynamicDeployTables.add(dynamicDeployTable);} else {dynamicDeployTables = ListUtil.createList();dynamicDeployTables.add(dynamicDeployTable);dynamicDeployTableMap.put(parentId, dynamicDeployTables);}}recursionFn(dynamicDeployTableMap, returnDynamicDeployTable);return returnDynamicDeployTable;}
/*** 递归列表** @param dynamicDeployTableMap 全部列表* @param parentDynamicDeployTable 父级对象*/private void recursionFn(Map<Long, List<DynamicDeployTable>> dynamicDeployTableMap, DynamicDeployTable parentDynamicDeployTable) {List<DynamicDeployTable> dynamicDeployTables = dynamicDeployTableMap.get(parentDynamicDeployTable.getDynamicId());if (ObjectUtil.isEmpty(dynamicDeployTables)) {return;}parentDynamicDeployTable.setChildren(dynamicDeployTables);for (DynamicDeployTable deployTable : dynamicDeployTables) {recursionFn(dynamicDeployTableMap, deployTable);}}
2.根据根节点设置
public List<WmsMaterialClass> getMaterialClassTreeList(WmsMaterialClassVo materialClassVo) {log.info("getMaterialClassTreeList,INPUT:{}", JSONObject.toJSONString(materialClassVo));List<WmsMaterialClass> initList = getMaterialClassList(materialClassVo);if (ObjectUtils.isEmpty(initList)) {return ListUtil.createList();}Map<Long, List<WmsMaterialClass>> matClasChildMap = new HashMap<>();for (WmsMaterialClass item : initList) {Long parentId = item.getParentId();List<WmsMaterialClass> materialClasses = matClasChildMap.get(parentId);if (ObjectUtil.isEmpty(materialClasses)) {materialClasses.add(item);matClasChildMap.put(parentId, materialClasses);} else {materialClasses.add(item);}}List<WmsMaterialClass> rootNodes = matClasChildMap.get(0L);if (ObjectUtils.isEmpty(rootNodes)) {return ListUtil.createList();}for (WmsMaterialClass rootNode : rootNodes) {childTree(matClasChildMap,rootNode);}return rootNodes;}private void childTree(Map<Long, List<WmsMaterialClass>> matClasChildMap,WmsMaterialClass node) {Long nodeId = node.getId();List<WmsMaterialClass> children = matClasChildMap.get(nodeId);if (!ObjectUtils.isEmpty(children)) {node.setChildren(children);for (WmsMaterialClass child : children) {childTree( matClasChildMap,child);}}}