级联树SELECTTREE格式调整
步骤:
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);
}
}
}