定义一个公司类Company,包含id、name、parentId三个属性。给定一个List<Company>,包含顶层公司和所有子公司,顶层公司仅有一个。实现一个工具类,包含方法A:传入List<Company>,返回一个Company树状结构数据;方法B:传入Company树状结构数据,遍历打印出所有子公司名称
时间: 2024-04-16 13:27:11 浏览: 16
可以按照以下方式实现一个工具类,包含A和方法B:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Company {
private int id;
private String name;
private int parentId;
public Company(int id, String name, int parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getParentId() {
return parentId;
}
}
class CompanyUtils {
public static Company buildCompanyTree(List<Company> companies) {
Map<Integer, List<Company>> companyMap = new HashMap<>();
// 根据parentId将公司分组
for (Company company : companies) {
int parentId = company.getParentId();
if (!companyMap.containsKey(parentId)) {
companyMap.put(parentId, new ArrayList<>());
}
companyMap.get(parentId).add(company);
}
// 递归构建公司树
return buildCompanyTree(0, companyMap);
}
private static Company buildCompanyTree(int parentId, Map<Integer, List<Company>> companyMap) {
List<Company> children = companyMap.get(parentId);
if (children == null || children.isEmpty()) {
return null;
}
Company parent = null;
for (Company child : children) {
Company subTree = buildCompanyTree(child.getId(), companyMap);
if (parent == null) {
parent = child;
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(subTree);
}
return parent;
}
public static void printSubCompanies(Company company) {
if (company == null) {
return;
}
List<Company> children = company.getChildren();
if (children != null && !children.isEmpty()) {
for (Company child : children) {
System.out.println(child.getName());
printSubCompanies(child);
}
}
}
}
```
使用方法A,将List<Company>转换为树状结构数据:
```java
List<Company> companies = new ArrayList<>();
// 添加公司数据到list中
Company companyTree = CompanyUtils.buildCompanyTree(companies);
```
使用方法B,遍历打印出所有子公司名称:
```java
CompanyUtils.printSubCompanies(companyTree);
```
请注意,以上代码只是示例,您需要根据实际情况进行适当的修改。