JAVA获取树形结构
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获取树形结构的更多相关文章
- java返回树形结构的正确姿势
业务场景 通常我们前端需要一个树形的导航菜单或者分类菜单,如后台权限管理中的权限树,亦或者下面例子中商城系统的商品分类多级菜单(一般为三级菜单) 数据库设计 数据库设计,采用parentId来指向自己 ...
- java 实现树形结构
package tree; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java ...
- Java实现树形结构的数据转Json格式
在项目中难免会用到树形结构,毕竟这是一种常用的组织架构.楼主这里整理了两个实现的版本,可以直接拿来使用,非常方便. 楼主没有单独建项目,直接在以前的一个Demo上实现的.第一种,看下面代码: pack ...
- Java创建树形结构算法实例
在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...
- java后台树形结构展示---懒加载
一.数据库设计 二.实体类:entity import com.joyoung.cloud.security.common.validatedGroup.Add;import com.joyoung. ...
- 使用递归算法结合数据库解析成java树形结构
使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...
- Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级
在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...
- java树形结构工具类
一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...
- MySQL 树形结构 根据指定节点 获取其所在全路径节点序列
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其所在全路径节点序列. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合进行逻辑处理,获取全路径节点序列. 2.直接自定义My ...
随机推荐
- 一键配置树莓派wifi、静态ip等
系统老是被我玩坏,重新烧录系统后配置又太麻烦,用shell脚本一键配置一下wifi和静态IP #!/bin/bash touch /media/fanghaoyu/boot/ssh echo &quo ...
- C++学习(8)—— 封装
C++面向对象的三大特性:封装.继承.多态 C++认为万事万物都可以为对象,对象上有其属性和行为 具有相同性质的对象,可以抽象为类 1. 封装的意义 封装是C++面向对象三大特性之一 封装的意义: ...
- Vuex准备
(1)简介 每一个 Vuex 应用的核心就是 store(仓库).“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state).Vuex 和单纯的全局对象有以下两点不同: Vuex ...
- Spring Cloud 之 Consul 知识点:服务注册与发现(类似工具:Eureka、ZooKeeper、Etcd)
资料 网址 springcloud(十三):注册中心 Consul 使用详解 http://ityouknow.com/springcloud/2018/07/20/spring-cloud-cons ...
- docker, docker-compose安装和使用
官方文档: 安装docker: https://docs.docker.com/install/linux/docker-ce/centos/ 安装docker-compose: https://do ...
- Ruby for
#!/usr/bin/ruby -w# -*- coding: UTF-8 -*-for i in 1..5 print i," "endprint "\n"f ...
- MySQL利用LOCATE,CONCAT查询
SELECT * FROM table t WHERE 1=1 AND LOCATE(#{searchParams},CONCAT(t.account,IFNULL(t.id,''),IFNULL(t ...
- jmeter+ant+jenkins搭建接口自动化测试环境(基于win)
1.jmeter jmeter依赖java运行环境,所以需要提前下载jdk并配置好环境变量 官网下载(http://jmeter.apache.org/download_jmeter.cgi),我用的 ...
- fitnesse管理引进的jar包
如下:需要引进的jar很多,并且路径都不一样,这样增加删减jar就比较麻烦 !*> setup!define TEST_SYSTEM {slim}!define LOCAL_PATH {C:\ ...
- learning shell check host dependent pkg
[Purpose] Shell script check host dependent pkg [Eevironment] Ubuntu 16.04 bash env ...