公司树状结构
实体类:
public class Company {
private String companyId;
private String companyName;
private String parentCompanyId;
private List<Company> children;
//省略get/set`在这里插入代码片`
public void addChild(Company child) {
if (this.children == null) {
this.children = new ArrayList<>();
}
this.children.add(child);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Company company = (Company) o;
return Objects.equals(companyId, company.companyId);
}
@Override
public int hashCode() {
return Objects.hash(companyId);
}
}
///--------------------------------------------------
测试类:
public class Test {
public static void main(String[] args) {
List<Company> companies = new ArrayList<>();
companies.add(new Company("2", "子公司 1", "1"));
companies.add(new Company("2", "子公司 1-2", "1"));
companies.add(new Company("3", "子公司 2", "2"));
companies.add(new Company("4", "未匹配公司", "999")); // 模拟未匹配到上层公司的情况
Company tree = buildTree(companies);
System.out.println(JSON.toJSONString(tree));
}
public static Company buildTree(List<Company> companies) {
// 添加默认的顶级公司
Company root = new Company("1", "总公司", null);
companies.add(root);
Set<Company> uniqueCompanies = new HashSet<>(companies);
// 创建一个映射来存储公司对象
Map<String, Company> companyMap = new HashMap<>();
for (Company company : uniqueCompanies) {
companyMap.put(company.getCompanyId(), company);
}
// 遍历公司列表,构建树结构
for (Company company : uniqueCompanies) {
String parentId = company.getParentCompanyId();
if (parentId!= null) {
Company parent = companyMap.get(parentId);
if (parent!= null) {
parent.addChild(company);
} else {
root.addChild(company);
}
}
}
return root;
}
}