递归思想实现设备树型父子级关系
2019-04-09 本文已影响0人
康俊1024
问题:
已知设备信息(名称 + 本地编码),通过数据树型结构实现构建父子级关系。如下图
树型结构.png
代码如下:
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
for (int i = startRow; i <= endRow; i++) {
Row tempRow = sheetToplogy.getRow(i);
Map<String, String> map = new HashMap<>();
this.buildTopologyMap(tempRow, 0, map);
list.add(map);
}
Map<String, String> topologyMap = new LinkedHashMap<>();
for (int index = 0; index < list.size(); index++) {
Map<String, String> map = list.get(index);
String parentSign = this.recursive(list, index, new Integer(map.get("level"))); //递归得到父编码
topologyMap.put(map.get("sign"), parentSign); //父子对应关系
}
private void buildTopologyMap(Row row, Integer startColumn, Map<String, String> map) throws Exception {
for (int index = 0; index < 6; index++) {
Cell cell = row.getCell(startColumn + index);
String cellValue = this.getCellStringValue(cell, false);
if (cellValue != null && !"".equals(cellValue)) {
map.put("name", cellValue); //设备名称
map.put("level", (index + 1) + ""); //第几个cell有值
break;
}
}
Cell cellSign = row.getCell(6);
String sign = this.getCellStringValue(cellSign, false);
map.put("sign", sign); //本地编码
}
private String recursive(List<Map<String, String>> list, int index, Integer level) {
if (index == -1) {
return "-1";
} else {
Map<String, String> map = list.get(index);
Integer findLevel = new Integer(map.get("level"));
if (level == (findLevel + 1)) { //判断条件 当上一个cell有值
return map.get("sign");
} else {
return recursive(list, index - 1, level);
}
}
}