公司树状结构

公司树状结构


实体类:

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;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值