# treeutil **Repository Path**: w-fy/treeutil ## Basic Information - **Project Name**: treeutil - **Description**: 一个简单实用的树结构生成工具,适用于将多种不同类型的对象组织成目录树结构的场景,后端按树结构组织好层级关系,传递给前端,方便读取为前端多层级目录组件。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-12-09 - **Last Updated**: 2024-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # treeutil #### 介绍 一个简单实用的树结构生成工具,适用于将多种不同类型的对象组织成目录树结构的场景,后端按树结构组织好层级关系,传递给前端,方便读取为前端多层级目录组件。 #### 使用说明 1. 工具总共三个类在tree包下(一个主类,一个接口,一个注解类),其它都是演示如何使用工具进行树结构生成的示例。 2. 使用了spring web starter 和 swagger 直接启动,在浏览器打开doc.html后就可以运行示例看树结构的生成效果。 3. 一般能组织成树结构的对象,基本都有这些特征,自包含对象,有id和父id的引用,有获取子集的方法,有用于排序的方法或字段值,所以在使用工具时,相关对象也需要指定这些属性和方法,详细可看model包下各对象。 4. 工具提供了三种生成树结构的方式和思路,详细可见controller包下对象。 5. 举例,要把不同类型的几个对象都组织起来形成一个多层级的资源目录树,可使用工具的Node接口方式或NodeValue注解方式 如下所示,有三种不同类型对象,Layer对象用来做目录,具备多层级特征,WFS和WMTS两个对象做叶子节点包含在Layer对象目录中,工具可以将这三类对象合并在一个集合List中处理成按层级划分包含的树型结构。 ` nodeList.add(new Layer("1", "", "道路", 0)); nodeList.add(new Layer("2", "", "水系", 1)); nodeList.add(new Layer("3", "2", "河流", 0)); nodeList.add(new Layer("4", "2", "水库", 0)); nodeList.add(new Layer("5", "", "历史影像图", 2));nodeList.add(new WMTS("d1", "1", "主干道", "http://a.b.c", new Date(), "mc")); nodeList.add(new WMTS("d2", "1", "乡道", "http://a.b.c", new Date(), "mc")); nodeList.add(new WFS("D3", "1", "省道", "http://a.b.c", new Date(), "4490", "PNG")); nodeList.add(new WFS("s3", "3", "渭河", "http://a.b.c", new Date(), "4490", "PNG")); nodeList.add(new WMTS("s2", "4", "新安江水库", "http://a.b.c", new Date(), "mc")); nodeList.add(new WFS("s4", "4", "石砭峪水库", "http://a.b.c", new Date(), "4490", "PNG")); nodeList.add(new WMTS("y2", "5", "2018年影像图", "http://a.b.c", Date.from(LocalDate.of(2018,10,11).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()), "mc")); nodeList.add(new WMTS("yq", "5", "2013年影像图", "http://a.b.c", Date.from(LocalDate.of(2013,10,11).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()), "mc")); nodeList.add(new WMTS("y42", "5", "2007年影像图", "http://a.b.c", Date.from(LocalDate.of(2007,10,11).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()), "mc")); nodeList.add(new WMTS("y22", "5", "2021年影像图", "http://a.b.c", Date.from(LocalDate.of(2021,10,11).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()), "mc")); return ResponseEntity.ok(TreeUtil.toTree(nodeList).get()); ` 组织成的树结构效果如下: > ` [ { "id": "1", "pid": "", "name": "道路", "index": 0, "subs": [ { "id": "d1", "name": "主干道", "url": "http://a.b.c", "mapDate": "2022-12-09", "matrixSetID": "mc", "index": 19335 }, { "id": "d2", "name": "乡道", "url": "http://a.b.c", "mapDate": "2022-12-09", "matrixSetID": "mc", "index": 19335 }, { "id": "D3", "name": "省道", "url": "http://a.b.c", "mapDate": "2022-12-09", "epsg": "4490", "format": "PNG", "index": 19335 } ] }, { "id": "2", "pid": "", "name": "水系", "index": 1, "subs": [ { "id": "3", "pid": "2", "name": "河流", "index": 0, "subs": [ { "id": "s3", "name": "渭河", "url": "http://a.b.c", "mapDate": "2022-12-09", "epsg": "4490", "format": "PNG", "index": 19335 } ] }, { "id": "4", "pid": "2", "name": "水库", "index": 0, "subs": [ { "id": "s4", "name": "石砭峪水库", "url": "http://a.b.c", "mapDate": "2022-12-09", "epsg": "4490", "format": "PNG", "index": 19335 }, { "id": "s2", "name": "新安江水库", "url": "http://a.b.c", "mapDate": "2022-12-09", "matrixSetID": "mc", "index": 19335 } ] } ] }, { "id": "5", "pid": "", "name": "历史影像图", "index": 2, "subs": [ { "id": "y42", "name": "2007年影像图", "url": "http://a.b.c", "mapDate": "2007-10-11", "matrixSetID": "mc", "index": 13796 }, { "id": "yq", "name": "2013年影像图", "url": "http://a.b.c", "mapDate": "2013-10-11", "matrixSetID": "mc", "index": 15988 }, { "id": "y2", "name": "2018年影像图", "url": "http://a.b.c", "mapDate": "2018-10-11", "matrixSetID": "mc", "index": 17814 }, { "id": "y22", "name": "2021年影像图", "url": "http://a.b.c", "mapDate": "2021-10-11", "matrixSetID": "mc", "index": 18910 } ] } ] `