怎么把具有树形父子结构的对象集合存到对应的树形父子结构表里呢

发布时间 2023-06-29 16:18:53作者: 英特耐雄纳尔定要实现
 

可以采用如下步骤:

  1. 创建一个 Map,key 是对象的 id,value 是对象本身。
  2. 遍历对象集合,将对象及其所有子对象都添加到 Map 中。
  3. 迭代 Map 中的对象,检测其父节点是否存在,存在则设置其父 id。
  4. 最后遍历 Map 中的所有对象,按照父 id 顺序插入数据库表中。

具体代码大概如下:

Map<Integer, Node> nodeMap = new HashMap<>();

for (Node node : nodeList) {
    nodeMap.put(node.getId(), node);
    addChildrenToMap(node.getChildren(), nodeMap);    
}

// 设置父 id 
for (Node node : nodeMap.values()) {
    Node parent = nodeMap.get(node.getParentId());
    if (parent != null) {
        node.setParentId(parent.getId());
    } 
}

// 按照父 id 排序后插入数据库
List<Node> insertList = new ArrayList<>(nodeMap.values());  
Collections.sort(insertList, (n1, n2) -> 
    Integer.compare(n1.getParentId(), n2.getParentId()));

for (Node node : insertList) {
    // 插入数据库
}

 

addChildrenToMap()
方法用于递归添加子对象到 Map 中:

 

void addChildrenToMap(List<Node> children, Map<Integer, Node> nodeMap) {
    for (Node child : children) {
        nodeMap.put(child.getId(), child); 
        addChildrenToMap(child.getChildren(), nodeMap);
    }
}

这个代码主要分为以下几个步骤:

  1. 创建一个 Map,用来存储所有对象,key 是对象 id,value 是对象本身。
Map<Integer, Node> nodeMap = new HashMap<>();
  1. 遍历对象集合,将所有对象及其子对象都添加到 Map 中。
for (Node node : nodeList) {
    nodeMap.put(node.getId(), node);
    addChildrenToMap(node.getChildren(), nodeMap);    
}

 

addChildrenToMap()
方法是递归的添加子对象。

 

  1. 设置每个对象的父 id。
for (Node node : nodeMap.values()) {
    Node parent = nodeMap.get(node.getParentId());
    if (parent != null) {
        node.setParentId(parent.getId()); 
    }
}
  1. 根据父 id 排序对象集合。
Collections.sort(insertList, (n1, n2) -> 
    Integer.compare(n1.getParentId(), n2.getParentId()));
  1. 按照排序后的顺序插入数据库。
for (Node node : insertList) {
    // 插入数据库  
}

总的来说,第一步建立对象与 id 的映射;第二步递归添加所有子对象;第三步设置正确的父 id;第四步根据父 id 排序;最后第五步按顺序插入数据库,就能保存正确的树形结构了。