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. Element布局实现日历布局

    1.基于Bootstrap的栅格布局 <div id="home" style="margin-top: 60px;"> <div class ...

  2. dfs 正则表达式

    192. 通配符匹配 中文 English 判断两个可能包含通配符“?”和“*”的字符串是否匹配.匹配规则如下: '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个串完 ...

  3. php构建型模式(Builder pattern)

    练代码,增加了调用时的输出. <?php /* The builder pattern separates the construction of a complex object from i ...

  4. python--中文和UTF-8之间的转换

    因为想更改数据库里内容. 而这个内容,没有通过WEB开放编辑显示, 且放在里面的中文为UTF-8编码过的. 所以,想快速显示和更新里面的内容, 想到了这个方法. # coding=utf-8 org_ ...

  5. MyBatis mapper.xml中SQL处理小于号与大于号

    这种问题在xml处理sql的程序中经常需要我们来进行特殊处理. 其实很简单,我们只需作如下替换即可避免上述的错误: < <= > >= & ' " < ...

  6. pycharm连不上数据库:报警代码Connection to api@localhost failed. [08001] Could not create connection to d

    pycharm 换成2019之后连接数据库用户名密码数据库名字都没错,就是连接不上去,网上百度一下,试试将URL后面拼接 ?useSSL=false&serverTimezone=UTC 发现 ...

  7. nodegui 使用react开发跨平台应用试用

    nodegui官方团队提供了基于react 应用开发方式,同时我们集成官方的packer 进行快速的应用打包 项目说明 项目使用了官方的计算机应用,我使用官方的react starter,同时添加了p ...

  8. ffmpeg结合SDL编写播放器(三)

    接下来是解析影片的帧 /*** project.c ***/ #include<stdio.h> #include<libavcodec/avcodec.h> #include ...

  9. return、reutrn false、e.preventDefault、e.stopPropagation、e.stopImmediatePropagation的区别

    return var i = function(){ return } console.log(i())//undefined return的主要作用是阻止函数继续执行,直接返回undefined r ...

  10. JAVA字符编码二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

    第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换   1.函数介绍 在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有 ...