第一丶构建树形第一层
/**
*
* @param allNode 要排序的List
* @param parentMap 构建所有父类的List
* @param loaStubHashMap 构建父类对应的子类List
* @param partfid 顶层父
*/
public static void getNode(List<Map> allNode, List<Map> parentMap,
Map<String, List<Map>> loaStubHashMap,String partfid){
for(Map m:allNode){
if(m.get("GPARTFID").equals(partfid)){
//找出所有第一层结构
parentMap.add(m);
}
}
//从第一层开始往下找结构
for(int i=0;i< allNode.size();i++){
List<Map> child = new ArrayList<>();
Map parent = allNode.get(i);
String partBase = parent.get("GPARTID").toString();
for(Map m:allNode){
if(m.get("GPARTFID").equals(parent.get("GPARTID"))){
if(loaStubHashMap.containsKey(partBase)){
loaStubHashMap.get(partBase).add(m);
}else{
child.add(m);
loaStubHashMap.put(partBase,child);
}
}
}
}
}
第二丶开始构建树形结构
/**
*
* @param bomlist 最终的排序结果
* @param parentMap 父件List
* @param loaStubHashMap 父对应的子List
* @param level (可移除)
* @param partInfo (可移除)
*/
public static void changeToBomlist(List<BOMStubInfo> bomlist,List<Map> parentMap,
Map<String, List<Map>> loaStubHashMap,int level,Map<String,Map> partInfo){
if(parentMap.size() > 0){
for(Map parent:parentMap){
BOMStubInfo chld = getBOMStubInfo(parent,partInfo);
chld.setLEVELS(level);
bomlist.add(chld);
String childpart = (String) parent.get("GPARTID");
if (loaStubHashMap.containsKey(childpart)) {
//递归
List<Map> childlist = loaStubHashMap.get(childpart);
Recursive(childlist, level, bomlist, loaStubHashMap,partInfo);
}
}
}
}
第三丶形成递归循环
public static void Recursive(List<Map> childlist, int level,
List<BOMStubInfo> bomlist, Map<String, List<Map>> loasmap,Map<String,Map> partInfo){
level = level + 1;
for (Map pre : childlist) {
BOMStubInfo chld = getBOMStubInfo(pre,partInfo);
chld.setLEVELS(level);
bomlist.add(chld);
String childpart = (String) pre.get("GPARTID");
if (loasmap.containsKey(childpart)) {
//递归
List<Map> chlist = loasmap.get(childpart);
Recursive(chlist, level, bomlist, loasmap,partInfo);
}
}
}