编写一个通用递归获取树形结构对象集合的方法

        /// <summary>
        /// 通用递归获取树状子节点信息
        /// </summary>
        /// <param name="item"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private List<T> getTreeListByPid<T, F>(List<F> item, long pid, F d) where T : BaseTreeDto<T>, new() where F : BaseTreeDic, new()
        {
            List<T> ItemsDto = new List<T>();
            //限制条件跳出
            if (item.Where(s => s.Pid == pid).Count() > 0)
            {
                item.Where(s => s.Pid == pid).ToList().ForEach(f =>
                {
                    ItemsDto.Add(new T { Id = f.Id, Name = f.Name, Item = getTreeListByPid<T, F>(item, f.Id, f) });
                });
            }
            return ItemsDto;
        }
    public class BaseTreeDto<T>
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public List<T> Item { get; set; }
    }

    public class BaseTreeDic
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public string Code { get; set; }
        public long Pid { get; set; }
    }

调用方式 将头节点筛选出来然后传参进入方法即可(以下是伪代码)

            List<T> list = new List<T>();
            List<F> item = GetListF();
            List<F> tempAllitem = item.Where(i => i.Pid == 0).ToList();
            tempAllitem.ForEach(i =>
            {
                list.Add(new T{ Id = i.Id, Name = i.Name, Item = getTreeListByPid<T, F>(item, i.Id, i) });
            });

原文地址:https://www.cnblogs.com/zzlblog/p/10014907.html

时间: 2024-10-07 19:34:02

编写一个通用递归获取树形结构对象集合的方法的相关文章

编写一个通用的Makefile文件

1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe 1.2体验在VC下程序的编译 a.先编译,在链接 b.修改了哪个文件,就单独编译此文件,在链接 c.修改了哪个头文件,就单独编译使用该头文件的源文件,在链接 1.3在linux下实现上述要求 2.编写一个测试的Makefile 2.1直接编译链接 1 gcc -o test a.c b.c 缺点:改变其中一

Delphi中根据分类数据生成树形结构的最优方法

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

递归生成树形结构

原文地址:https://blog.csdn.net/q13965211/article/details/80772544 节点树树形结构 Tree 结构 import java.util.List; /** * @Author fanwei * @date 2018-6-13 17:04 */ public class TreeNode { private Integer key; private String title; private Integer parentId; private

【反射之Method】如何获取字节码对象中的方法

■获取字节码对象的方法有两种 第一种:使用字节码对象获取所有的方法(只能获取公有的方法,而不能获取私有/受保护的方法) 语法: Class.getMethods() 示例: Method[] methods = personClass.getMethods(); 第二种:使用字节码对象获取对象指定的方法,其参数:1.方法名:2.传入方法的参数类型加上".class" 语法: Class.getMethod(String name, Class<?>... parameter

根据接口入参不同返回不同对象集合的方法

最近要写一个外部调用的webservice接口,入参和出参都是xml格式,根据不同的type查询不同的集合返回,代码如下: 首先配置webservice接口的xml文件 然后写接口类 然后是实现类 实现类中最主要的是根据不同的type查询出结果然后分装成返回xml 封装的返回方法运用了泛型,可以传入不同的对象集合 public <T> String getDetailXml(String retCode,List<T> list){ Document doc=DocumentHel

编写一个封装用户信息的JavaBean对象,通过操作JavaBean的动作标识,输出用户的注册信息。

package come.hanqi.test; public class YhBean { private String username; private String password; private String email; private String dizhi; public String getUsername() { return username; } public void setUsername(String username) { this.username = u

C/C++ 编写一个通用的Makefile 来编译.c .cpp 或混编

1.虽然能编译出程序,但是会提示错误.目前暂未解决 make: sinclude: Command not foundmake: *** [test] Error 127 2. 后续主要要修改的部分: 1> PROGRAM := hello # 设置运行程序名 2> SRCDIRS := .  # 源程序位于当前目录下 3> SRCEXTS := .c .cpp  # 源程序文件有 .c 和 .cpp 两种类型 4> CFLAGS := -g # 为 c 目标程序包含 gdb 调试

Js与Jq 获取浏览器和对象值的方法

JS and Jquery 都能获取页面元素的宽度,高度和相对位移等数值,那他们之间能相互转换或替代吗,写法又有哪些差异呢?本文将详细为你介绍. 1.Js获取浏览器高度和宽度document.documentElement.clientWidth ==> 浏览器可见区域宽度 document.documentElement.clientHeight ==> 浏览器可见区域高度 document.body.clientWidth ==> BODY对象宽度 document.body.cli

1.(1)编写一个接口ShapePara,要求: 接口中的方法: double getArea():获得图形的面积。double getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的dou

package jiekou1; public interface ShapePara { //定义常量PI final double PI=3.14; //定义抽象方法 //获得图形面积 double getArea(); //获得图形周长 double getCircumference(); } package jiekou1; public class Circle implements ShapePara { //定义成员变量 public double radius; public d