先将list转成树形结构,list的泛型为map
* 转成父子结构
* @param list
* @return
*/
public static HashMap<String, ArrayList> getRecursionMap(List list) {
HashMap<String, ArrayList> pMap = new HashMap<>();
ArrayList plist = null;
String asseblyPartBase = "";
for (int i = 0; i < list.size(); i++) {
Map map = (Map) list.get(i);
asseblyPartBase = (String) map.get("ASSEMBLYPARTBASE");
if (pMap.containsKey(asseblyPartBase)) {
plist = pMap.get(asseblyPartBase);
} else {
plist = new ArrayList();
pMap.put(asseblyPartBase, plist);
}
plist.add(map);
}
return pMap;
}
转成树形结构后通过递归的方式构建 父+子的多层路径结构
* 获取路径
* @param path
* @param partbase
* @param recursionMap
*/
public void getPath(String path, String partbase, HashMap<String, ArrayList> recursionMap) {
List list = recursionMap.get(partbase);
if (list == null || list.isEmpty()) {
return;
}
Map map = null;
String newPath = "";
String assemblyPartBase = "";
String componentPartBase = "";
String seq = "";
String tempComponentPartBase = "";
for (int i = 0; i < list.size(); i++) {
map = (Map) list.get(i);
assemblyPartBase = (String) map.get("ASSEMBLYPARTBASE");
componentPartBase = (String) map.get("COMPONENTPARTBASE");
seq = String.valueOf(map.get("ASSEMBLYSEQUENCE"));
newPath = partbase + "|" + componentPartBase + "@" + seq;
if (assemblyPartBase.equals(partbase)) {
getPath(newPath, componentPartBase, recursionMap);
pathMath.put(newPath, map);
}
}
}