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. php + h5 实现socket推送技术

    在socket出现之前已经有ajax定时请求.长轮询等方案,但都不能满足需求,socket就应用而生了. socket基本函数socket 总结下常用的socket函数 服务端: socket_cre ...

  2. Copy Files from Windows 10 to wsl

    Method 1 reboot( close wsl window and reopen ) Method 2 – Windows System Drive as a Mount point Wind ...

  3. 《团队名称》第八次团队作业:Alpha冲刺day4

    项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8-软件测试与ALPHA冲刺 团队名称 快活帮 作业学习目标 (1)掌握 ...

  4. cmds系统归并缓慢的处理过程 2017-2-16

      检查反应较慢的时间段,数据库整体运行情况,从awr报告总看看是否有异常   以上是两个节点的等待事件排行,其中发现cursor: pin S wait on X等待事件类型是并行,切较高,开始分析 ...

  5. 学习:多字节编码(ANSI)和UNICODE编码的关系

    Windows 既可以使用 Unicode 字符集又可以使用传统的字符集(如多字节编码)来实现对多种语言的支持,以适应国际市场的要求.与传统的字符集编码相比,Unicode 是世界通用的字符编码标准, ...

  6. abp radio表单元素 消失了

    框架将原本的元素都隐藏掉了,取而代之的是根据label定义了自己的样式,如下: [type="radio"]:not(:checked)+label {    padding-le ...

  7. LeetCode 1100. Find K-Length Substrings With No Repeated Characters

    原题链接在这里:https://leetcode.com/problems/find-k-length-substrings-with-no-repeated-characters/ 题目: Give ...

  8. BZOJ 2600: [Ioi2011]ricehub 双指针+贪心

    不难发现,当我们要选的区间确定后,一定会把仓库安排到中间的稻草上(如果是偶数个的话中间两个都行). 然后按照坐标从小到大枚举右指针,左指针一定不递减,双指针扫一下就行了. code: #include ...

  9. CF1245D: Shichikuji and Power Grid

    CF1245D: Shichikuji and Power Grid 题意描述: 给定\(n\)个点\((n\leq2000)\),在第\(i\)个点上建立一个基站需要\(c_i\)的代价,连接两个点 ...

  10. 【转】为什么我们做分布式使用Redis?

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知.这里对 Redis 常见问题做一个总结,解决 ...