public class DepartmentResp { private String bumenbm; private String fbumenbm; private String bumenmch; private List<DepartmentResp> children = new ArrayList<DepartmentResp>(); } 如何使用递归取到 children中的最底层的DepartmentResp并设置每个bumenmch
时间: 2024-03-08 09:50:19 浏览: 19
可以通过递归遍历children列表来找到最底层的DepartmentResp对象,并设置每个bumenmch属性。
示例代码如下:
```
public void setBumenmchForChildren(DepartmentResp departmentResp, String bumenmch) {
if (departmentResp.getChildren() != null && !departmentResp.getChildren().isEmpty()) {
for (DepartmentResp child : departmentResp.getChildren()) {
setBumenmchForChildren(child, bumenmch);
}
} else {
departmentResp.setBumenmch(bumenmch);
}
}
```
使用方法如下:
```
DepartmentResp rootDepartment = ...; // 根节点
setBumenmchForChildren(rootDepartment, "最底层的部门名称");
```
这样就可以递归遍历children列表,找到最底层的DepartmentResp对象,并设置每个bumenmch属性。
相关问题
现在有两个实体类对象分别是 public class DepartmentResp { @ApiModelProperty("部门编码") private String bumenbm; @ApiModelProperty("部门名称") private String bumenmch; @ApiModelProperty(value = "子节点") private List<DepartmentResp> children = new ArrayList<DepartmentResp>(); @ApiModelProperty(value = "分区子节点信息节点") private List<Area> areaList; } 和 public class Area { @ApiModelProperty("片区id") private String pianquid; @ApiModelProperty("部门编码") private String bumenbm; @ApiModelProperty("片区名称") private String name; @ApiModelProperty("片区名称") private LocalDate createTime; } 现在需要当DepartmentResp中的bumenbm等于Area中的bumenbm时,就把 Area添加到这一层级的areaList的中,直到递归到children最小层级中的每一个DepartmentResp,
您的问题是如何将Area对象添加到DepartmentResp的areaList中,当DepartmentResp的bumenbm等于Area的bumenbm时,直到递归到children最小层级中的每一个DepartmentResp。
您可以使用递归函数来实现这个过程。具体步骤如下:
1. 遍历DepartmentResp中的每个子节点,如果子节点有children,则递归调用该函数,直到遍历到最小层级的子节点。
2. 在每个子节点中,遍历Area列表,如果Area的bumenbm等于子节点的bumenbm,则将Area添加到该子节点的areaList中。
3. 返回最终的DepartmentResp对象,其中包含了所有的Area信息。
示例代码如下:
```
public DepartmentResp addAreaToDepartment(DepartmentResp department) {
List<DepartmentResp> children = department.getChildren();
List<Area> areaList = department.getAreaList();
// 遍历子节点
for (DepartmentResp child : children) {
// 递归调用该函数
addAreaToDepartment(child);
// 遍历Area列表
for (Area area : areaList) {
// 如果Area的bumenbm等于子节点的bumenbm,则将Area添加到该子节点的areaList中
if (area.getBumenbm().equals(child.getBumenbm())) {
child.getAreaList().add(area);
}
}
}
return department;
}
```
使用示例:
```
DepartmentResp department = new DepartmentResp();
// 添加一些children和areaList信息
DepartmentResp result = addAreaToDepartment(department);
```
注意:该函数会直接修改DepartmentResp对象,因此建议在调用该函数之前先对原始数据进行备份。
Map <String,Map<String, List<ReportPlan>>> list转多级数据结构
可以使用循环和逐层创建Map的方式将Map<String,Map<String,List<ReportPlan>>>转换为多级数据结构,具体实现如下:
```
// 假设原始Map为map
Map<String,Map<String,List<ReportPlan>>> map = ...;
// 创建多级数据结构result,初始为空
List<Node> result = new ArrayList<>();
// 循环遍历原始Map的每个键值对
for (Map.Entry<String,Map<String,List<ReportPlan>>> entry1 : map.entrySet()) {
String key1 = entry1.getKey();
Map<String,List<ReportPlan>> subMap1 = entry1.getValue();
// 创建一级节点
Node node1 = new Node(key1);
// 循环遍历一级节点的子Map的每个键值对
for (Map.Entry<String,List<ReportPlan>> entry2 : subMap1.entrySet()) {
String key2 = entry2.getKey();
List<ReportPlan> reportPlans = entry2.getValue();
// 创建二级节点
Node node2 = new Node(key2);
// 循环遍历二级节点的子List的每个元素
for (ReportPlan reportPlan : reportPlans) {
// 创建三级节点
Node node3 = new Node(reportPlan);
// 将三级节点添加到二级节点的子节点中
node2.addChild(node3);
}
// 将二级节点添加到一级节点的子节点中
node1.addChild(node2);
}
// 将一级节点添加到结果集中
result.add(node1);
}
// 多级数据结构转换完成,result即为最终结果
```
其中,Node类可以自定义实现,用于表示多级数据结构的节点,示例代码如下:
```
public class Node {
private String name;
private ReportPlan reportPlan;
private List<Node> children;
public Node(String name) {
this.name = name;
}
public Node(ReportPlan reportPlan) {
this.reportPlan = reportPlan;
}
public void addChild(Node child) {
if (children == null) {
children = new ArrayList<>();
}
children.add(child);
}
// 省略getter和setter
}
```