递归思想实现设备树型父子级关系

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);
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读