package com.nnmzkj.common.dto;

import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; @Data
public class TreeParamDto implements Serializable { private static final long serialVersionUID = -7692266106281926159L;
private Long id; private String name; private Long parentId; private Long menuId; //冗余字段 private Integer isParent; private List<TreeParamDto> children ;
}
/////////////////
package com.nnmzkj.common.utils; import com.nnmzkj.common.dto.BaseTreeGrid;
import com.nnmzkj.common.dto.TreeParamDto;
import com.nnmzkj.sys.model.SysMenuEntity;
import com.nnmzkj.sys.model.SysOrgEntity;
import org.springframework.stereotype.Component; import java.util.ArrayList;
import java.util.List; @Component
public class TreeUtils { /**
* 真*树形结构
* @param myId
* @param list
* @param <T>
* @return
*/
public static <T extends TreeParamDto> List<T> getTreeArray(Long myId,List<T> list){
List<T> result = new ArrayList<T>();
List<T> childList = getChild(myId, list);
if (childList.size() >0){
for (T t : childList) {
List<T> treeArray = getTreeArray(t.getId(), list);
if(t.getChildren() == null) {
t.setChildren(new ArrayList<TreeParamDto>());
}
for (T t1 : treeArray) {
t.getChildren().add(t1);
}
result.add(t);
}
}
return result;
} public static <T extends TreeParamDto> List<T> selectTree(Long myId,List<T> list,List<T> result,String str){
List<T> childList = getChild(myId, list);
if (childList.size() >0){
if (myId >0){
str = "|----" + str;
}
for (T t : childList) {
t.setName(str+t.getName());
result.add(t);
result = selectTree(t.getId(), list,result,str);
}
return result;
}
return result;
} /**
* 获取子集
* @param list
* @param <T>
* @return
*/
public static <T extends TreeParamDto> List<T> getChild(Long myId,List<T> list){
List<T> result = new ArrayList<T>();
if (!StringUtil.isNullOrEmpty(list) && list.size() >0){
for (T t : list) {
if (t.getParentId().equals(myId)){
result.add(t);
}
}
}
return result;
} public static List<SysOrgEntity> selectOrg(List<SysOrgEntity> list){
list = getTreeList(list);
for (SysOrgEntity sysOrg : list) {
String str ="";
Byte level = sysOrg.getLevel();
if (level != 0){
for (int i=0 ;i<sysOrg.getLevel();i++){
str = str + "|----";
}
}
sysOrg.setName(str+sysOrg.getName());
}
return list;
} /**
* 使列表树结构排序
* @param allList
* @return
*/
public static List<SysOrgEntity> getTreeList(List<SysOrgEntity> allList){
List<SysOrgEntity> rootList = getTreeRootList(0,allList);
List<SysOrgEntity> list = new ArrayList<SysOrgEntity>();
for (SysOrgEntity entity : rootList) {
list.addAll(getChildList(entity,allList));
}
return list ;
} /**
* 获取所有子机构
* @param parent 父机构
* @param allList 所有列表
* @return
*/
public static List<SysOrgEntity> getChildList(SysOrgEntity parent,List<SysOrgEntity> allList){
//存放子机构的集合
ArrayList<SysOrgEntity> listChild = new ArrayList<SysOrgEntity>();
listChild.add(parent);
for (SysOrgEntity entity : allList) {
if(entity.getParentId().equals(parent.getOrgId())) {
listChild.addAll(getChildList(entity, allList)) ;
}
}
return listChild ;
} /**
* 获取根机构集合
* @param rootLevel 根机构等级
* @param allList
* @return
*/
public static List<SysOrgEntity> getTreeRootList(int rootLevel,List<SysOrgEntity> allList){
if(rootLevel>=5){
return null;
}
List<SysOrgEntity> rootList = new ArrayList<SysOrgEntity>();
for (SysOrgEntity entity : allList) {
if(entity.getLevel()==rootLevel){
rootList.add(entity);
}
}
if(rootList.size()>0){
return rootList ;
}else{
rootList = getTreeRootList(rootLevel+1,allList);
}
return rootList;
}
}

JAVA获取树形结构的更多相关文章

  1. java返回树形结构的正确姿势

    业务场景 通常我们前端需要一个树形的导航菜单或者分类菜单,如后台权限管理中的权限树,亦或者下面例子中商城系统的商品分类多级菜单(一般为三级菜单) 数据库设计 数据库设计,采用parentId来指向自己 ...

  2. java 实现树形结构

    package tree; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java ...

  3. Java实现树形结构的数据转Json格式

    在项目中难免会用到树形结构,毕竟这是一种常用的组织架构.楼主这里整理了两个实现的版本,可以直接拿来使用,非常方便. 楼主没有单独建项目,直接在以前的一个Demo上实现的.第一种,看下面代码: pack ...

  4. Java创建树形结构算法实例

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...

  5. java后台树形结构展示---懒加载

    一.数据库设计 二.实体类:entity import com.joyoung.cloud.security.common.validatedGroup.Add;import com.joyoung. ...

  6. 使用递归算法结合数据库解析成java树形结构

    使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...

  7. Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级

    在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...

  8. java树形结构工具类

    一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...

  9. MySQL 树形结构 根据指定节点 获取其所在全路径节点序列

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其所在全路径节点序列. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合进行逻辑处理,获取全路径节点序列. 2.直接自定义My ...

随机推荐

  1. PostgreSQL分区表实现——pg_pathman分区表管理

    该博文用于自己学习记录,内容节选自: https://github.com/digoal/blog/blob/master/201610/20161024_01.md pg_pathman 创建分区表 ...

  2. Mac下Mysql配置

    安装 http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.6/mysql-5.6.41-macos10.13-x86_ ...

  3. 纯数据结构Java实现(11/11)(散列)

    欢迎访问我的自建博客: CH-YK Blog.

  4. version GLIBCXX3.4.21 not defined in file libstdc++.so.6 with link time reference

    问题:在运行C++程序时,输入 ./a.out 输出:symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version ...

  5. Could not resolve com.android.support:design 28.0.0

    想试一试android的那个侧滑栏功能,需要用到 'com.android.support:design:28.0.0'建好之后一直报关于28.00的错误,一开始各种百度更改配置没吊用,最后感觉是网络 ...

  6. beta冲刺(4/7)

    作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:项目beta冲刺(团队) 团队名称: 那周余嘉熊掌将得队 作业目标:beta(4/7) 队员学号 队员姓名 博客地址 备注 221600 ...

  7. Spring Cloud Config 知识点

    Spring Cloud Config项目是一个解决分布式系统的配置管理方案.它包含了Client和Server两个部分,server提供配置文件的存储.以接口的形式将配置文件的内容提供出去,clie ...

  8. wordpress调用置顶文章sticky_posts的三种方法

    有时我们在开发wordpress时需要调用置顶文章sticky_posts,怎么调用呢?几种写法,有用到query_post的,有用到WP_Query,也有用到is_sticky(),下面随ytkah ...

  9. Weltanschauung--世界观是人类知觉的基础架构

    世界观(德文:Weltanschauung)意思是「著眼世界之上」.这是德国知识论中所使用的语言,指的是一个「广泛世界的观念」. 它指涉的是一种人类知觉的基础架构,透过它,个体可以理解这个世界并且与它 ...

  10. 爬虫高性能asyncio+ahttpio

    async实现协程,异步编程 我们都知道,现在的服务器开发对于IO调度的优先级控制权已经不再依靠系统,都希望采用协程的方式实现高效的并发任务,如js.lua等在异步协程方面都做的很强大. python ...