Java递归将数据库中的省市区转为树形结构
时间: 2023-11-27 08:55:40 浏览: 32
可以使用递归来将数据库中的省市区数据转为树形结构。
首先,需要定义一个类来表示地区信息:
```
public class Area {
private Long id;
private String name;
private Long parentId;
// getters and setters
}
```
接着,可以使用递归来构建树形结构:
```
public class AreaTreeBuilder {
private List<Area> areaList;
public AreaTreeBuilder(List<Area> areaList) {
this.areaList = areaList;
}
public List<Area> build() {
List<Area> result = new ArrayList<>();
Map<Long, List<Area>> childrenMap = new HashMap<>();
for (Area area : areaList) {
Long parentId = area.getParentId();
if (parentId == null) {
result.add(area);
} else {
List<Area> children = childrenMap.get(parentId);
if (children == null) {
children = new ArrayList<>();
childrenMap.put(parentId, children);
}
children.add(area);
}
}
buildTree(result, childrenMap);
return result;
}
private void buildTree(List<Area> parentList, Map<Long, List<Area>> childrenMap) {
for (Area parent : parentList) {
List<Area> children = childrenMap.get(parent.getId());
if (children != null) {
parent.setChildren(children);
buildTree(children, childrenMap);
}
}
}
}
```
以上代码会先遍历所有的区域信息,将每个区域按照父节点进行分组,然后使用递归来构建树形结构。最后返回根节点的列表即可。
使用时,可以先从数据库中查询出所有的区域信息,然后调用 `AreaTreeBuilder` 的 `build()` 方法来构建树形结构:
```
List<Area> areaList = dao.selectAllAreas();
List<Area> tree = new AreaTreeBuilder(areaList).build();
```
注意,以上代码中的 `Dao` 是一个示例,需要根据实际情况进行替换。同时,为了简化代码,省略了一些异常处理和类型转换等细节。实际应用中需要根据具体情况进行调整。