这个代码主要分为以下几个步骤:
- 创建一个 Map,用来存储所有对象,key 是对象 id,value 是对象本身。
Map<Integer, Node> nodeMap = new HashMap<>();
- 遍历对象集合,将所有对象及其子对象都添加到 Map 中。
for (Node node : nodeList) {
nodeMap.put(node.getId(), node);
addChildrenToMap(node.getChildren(), nodeMap);
}
addChildrenToMap()
方法是递归的添加子对象。
- 设置每个对象的父 id。
for (Node node : nodeMap.values()) {
Node parent = nodeMap.get(node.getParentId());
if (parent != null) {
node.setParentId(parent.getId());
}
}
- 根据父 id 排序对象集合。
Collections.sort(insertList, (n1, n2) ->
Integer.compare(n1.getParentId(), n2.getParentId()));
- 按照排序后的顺序插入数据库。
for (Node node : insertList) {
// 插入数据库
}
总的来说,第一步建立对象与 id 的映射;第二步递归添加所有子对象;第三步设置正确的父 id;第四步根据父 id 排序;最后第五步按顺序插入数据库,就能保存正确的树形结构了。