java 将数据转为树形数据

文章介绍了如何在Java后端和前端实现将列表数据转换为树形结构,用于展示和选择。提供的JavaScript和Java代码示例展示了递归函数`convertToTreeData`的工作原理,该函数根据parentId构建层级关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提

在java中,我们经常需要在前端展示一个树形机构,供用户点击选择,怎么实现呢,js代码

function convertToTreeData(departments, parentId) {
  const tree = [];
  
  departments.forEach(department => {
    if (department.parentId === parentId) {
      const children = convertToTreeData(departments, department.id);
      
      if (children.length > 0) {
        department.children = children;
      }
      
      tree.push(department);
    }
  });
  
  return tree;
}

java后端

和前端代码逻辑一样

public class OrgTreeExp {

    private String id;
    private String label;
    private String parentId;
    private List<OrgTreeExp> children;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    public List<OrgTreeExp> getChildren() {
        return children;
    }

    public void setChildren(List<OrgTreeExp> children) {
        this.children = children;
    }
}

public static List<OrgTreeExp> convertToTreeData(List<OrgTreeExp> orgs, String parentId) {
        List<OrgTreeExp> tree = new ArrayList<>();

        for (OrgTreeExp org : orgs) {
            if ( org.getParentId().equals(parentId)) {
                List<OrgTreeExp> children = convertToTreeData(orgs, org.getId());

                if (!children.isEmpty()) {
                    org.setChildren(children);
                }

                tree.add(org);
            }
        }

        return tree;
    }

如果要调用,直接将参数调用convertToTreeData方法则可,第一次调用传的parentId,必须是顶级节点的父节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值