list 递归 转 tree


        public List<TreeJsonM> GetTreeJsonMList(UserAdmin UserAdmin, ObjType objType)
        {
            Expression<Func<Sys_SupplieCate, bool>> where = a => a.Status != (int)Status.Disable
 && a.CustType == (int)objType && a.CompanyId == UserAdmin.CompanyId && a.UnionId == UserAdmin.UnionID;

            List<Sys_SupplieCate> listDep = GetALL(where).OrderBy(a => a.Id).ToList();


            return ConvertTreeJsonMList(listDep);
        }

        //错误的方式
        //List<TreeJsonM> ConvertTreeJsonM(List<Sys_SupplieCate> sys_SupplieCates,int parentId=0)
        //{
        //    List<TreeJsonM> treeJsonMs = new List<TreeJsonM>();
        //    List<Sys_SupplieCate> childs = sys_SupplieCates.Where(a => (a.ParentId==0||a.ParentId==null)
        //    || a.ParentId == parentId).ToList();

        //    if (childs.Count>0)
        //    {
        //        foreach (var item in childs)
        //        {
        //            List<Sys_SupplieCate> aa = sys_SupplieCates;
        //            treeJsonMs.Add(new TreeJsonM() {
        //                id=item.Id,
        //                name = item.Name,
        //                children = ConvertTreeJsonM(aa, item.Id),
        //            });
        //        }
        //    }
        //    return treeJsonMs;
        //}



        List<TreeJsonM> ConvertTreeJsonMList(List<Sys_SupplieCate> sys_SupplieCates, int parentId = 0)
        {
            List<TreeJsonM> treeJsonMs = new List<TreeJsonM>();
            //开始循环根节点
            foreach (var item in sys_SupplieCates.Where(a => a.ParentId == 0 || a.ParentId == null).ToList())
            {
                treeJsonMs.Add(ConvertTreeJsonM(sys_SupplieCates, new TreeJsonM() { id=item.Id,
                name=item.Name}));
            }
            return treeJsonMs;
        }

        //赋值节点的子节点集合
        TreeJsonM ConvertTreeJsonM(List<Sys_SupplieCate> sys_SupplieCates, TreeJsonM treeJsonM)
        {

            List<Sys_SupplieCate> childs = sys_SupplieCates.Where(a =>a.ParentId == treeJsonM.id).ToList();
            if (childs.Count > 0)
            {
                List<TreeJsonM> new_childs = new List<TreeJsonM>();
                foreach (var item in childs)
                {
                    TreeJsonM childrens = ConvertTreeJsonM(sys_SupplieCates, new TreeJsonM()
                    {
                        id = item.Id,
                        name = item.Name
                    });
                    new_childs.Add(childrens);
                }
                treeJsonM.children = new_childs;
            }
            return treeJsonM;
        }

 

将一个 List 换为树形结构,需要先将 List 中的元素按照父子关系进行排序,然后通过递归构建树形结构。下面是一个 Java 实现的示例代码: ```java public class TreeNode { private int id; private String name; private int parentId; private List<TreeNode> children = new ArrayList<>(); // 省略 getter 和 setter 方法 // 将 List 换为树形结构 public static List<TreeNode> buildTree(List<TreeNode> nodeList) { List<TreeNode> treeList = new ArrayList<>(); Map<Integer, TreeNode> nodeMap = new HashMap<>(); // 将节点放入 Map 中,方便后续查找 for (TreeNode node : nodeList) { nodeMap.put(node.getId(), node); } // 遍历节点,将子节点添加到父节点的 children 列表中 for (TreeNode node : nodeList) { if (node.getParentId() == 0) { // 根节点的 parentId 为 0 treeList.add(node); } else { TreeNode parent = nodeMap.get(node.getParentId()); if (parent != null) { parent.getChildren().add(node); } } } return treeList; } } ``` 示例代码中定义了一个 TreeNode 类,表示树节点,包含了节点的 id、name、parentId 和 children 属性。buildTree 方法接收一个 List<TreeNode> 参数,返回树形结构的根节点列表。 在 buildTree 方法中,首先遍历 nodeList,将节点放入一个 Map 中,方便后续查找。然后再次遍历 nodeList,将子节点添加到父节点的 children 列表中。如果当前节点的 parentId 为 0,则说明它是根节点,将其添加到 treeList 中返回。最终,treeList 中包含了所有根节点,每个根节点下面可能有子节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值