JDK 版本:jdk 1.8 及以上。
1. 组织表结构
表名 jpf_org
2. 组织类属性
类名 JpfOrgInfo
import java.util.Date; import java.util.List; import lombok.Data; import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = false) public class JpfOrgInfo { // 主键id private Long id; // 组织编号 private String orgNo; // 组织名称 private String orgName; // 父组织编号 private String parentNo; // 层级:C公司,S系统,D部门,A区域,G小组 private String level; // 状态:1正常,2废弃 private String status; // 创建人 private Long createId; // 创建时间 private Date createTime; // 更新人 private Long updateId; // 更新时间 private Date updateTime; // 父组织名称 private String parentName; // 子节点 private List<JpfOrgInfo> children; // 父节点 private List<JpfOrgInfo> parents; }
3. 组织工具类
类名 OrgUtils
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class OrgUtils { /** * 获取指定组织的所有上级节点 * * @param orgNo 指定组织编号 * @param list 所有的组织信息 * @return List * @author * @date 2019年8月29日 * @since JDK 1.8 */ public static List<JpfOrgInfo> getParents(String orgNo, List<JpfOrgInfo> list) { if (CommonUtil.isBlank(orgNo) || CommonUtil.isBlank(list)) { return null; } Map<String, JpfOrgInfo> map = list.stream() .collect(Collectors.toMap(JpfOrgInfo::getOrgNo, a -> a, (k1, k2) -> k1)); JpfOrgInfo curOrg = map.get(orgNo); if (curOrg == null) { return null; } List<JpfOrgInfo> orgList = new ArrayList<>(); orgList.add(curOrg); String parentNo = curOrg.getParentNo(); // parentNo为空表示递归到了顶层组织 while (!CommonUtil.isBlank(parentNo) && !Constant.EMPTY_ORG_NO.equals(parentNo)) { /* 递归查找每个组织的父级组织,一直到顶层组织 */ JpfOrgInfo parent = map.get(parentNo); orgList.add(parent); parentNo = parent.getParentNo(); } return orgList; } /** * 获取指定组织及其所有下级组织 * <p>结果包含父级组织</p> * @param pNo 父组织编号 * @param list 所有的组织 * @return List * @author * @date 2019年9月4日 * @since JDK 1.8 */ public static List<JpfOrgInfo> getChildren(String pNo, List<JpfOrgInfo> list) { if (CommonUtil.isBlank(pNo) || CommonUtil.isBlank(list)) { return null; } // 获取指定的父级组织 List<JpfOrgInfo> roots = list.stream().filter(aa -> (pNo.equals(aa.getOrgNo()))).collect(Collectors.toList()); if (CommonUtil.isBlank(roots)) { return null; } // 获取子组织 // List<JpfOrgInfo> subs = list.stream().filter(bb -> (!pNo.equals(bb.getOrgNo()))).collect(Collectors.toList()); roots.forEach(root -> buildSub(root, list)); return roots; } private static void buildSub(JpfOrgInfo parent, List<JpfOrgInfo> subs) { List<JpfOrgInfo> childs = subs.stream().filter(sub -> (sub.getParentNo().equals(parent.getOrgNo()))) .collect(Collectors.toList()); if (!CommonUtil.isBlank(childs)) { parent.setChildren(childs); childs.forEach(child -> buildSub(child, subs)); } } /** * 获取指定组织及其所有下级组织 * <p>结果不包含父级组织</p> * * @param list 所有的组织 * @param pNo 父组织编号 * @param childMenu 返回值:子组织 * @author * @date 2019年9月4日 * @since JDK 1.8 */ public static void getChildren(List<JpfOrgInfo> list, String pNo, List<JpfOrgInfo> childMenu) { if (!CommonUtil.isBlank(pNo) && !CommonUtil.isBlank(list)) { for (JpfOrgInfo mu : list) { // 遍历出父id等于参数的id,add进子节点集合 if (mu.getParentNo().equals(pNo)) { // 递归遍历下一级 getChildren(list, mu.getOrgNo(), childMenu); childMenu.add(mu); } } } } }
4. List 转树形结构
private List<JpfOrgInfo> buildTree(List<JpfOrgInfo> list, String orgNo) { if (CommonUtil.isBlank(list)) { return new ArrayList<>(); } List<JpfOrgInfo> treeList = new ArrayList<>(); for (JpfOrgInfo org : list) { if (CommonUtil.isBlank(org.getParentNo()) || "00000000".equals(org.getParentNo()) || orgNo.equals(org.getOrgNo())) { // 找到根 treeList.add(org); } for (JpfOrgInfo orgNode : list) { if (org.getOrgNo().equals(orgNode.getParentNo())) { if (CommonUtil.isBlank(org.getChildren())) { org.setChildren(new ArrayList<>()); } org.getChildren().add(orgNode); } } } return treeList; }
调用 buildTree(list, "");
相关推荐
http://blog.csdn.net/u014172271/article/details/79438214的源代码工程
项目可以运行,拥有完整的后台,sql语句,只需通过sql工具执行即可。
部门组织显示开发,从jsp到后台java都有详细解析,同时提供有相关的js。开发内容简单,适合初学者和忘记部门树开发者。
用Java实现文件树形结构的显示 (主要用于我的博文的代码资源下载)
java swing tree树的懒加载, 下载文件导入eclipse可直接运行。
机构人员树(单选、多选)示例 机构树实例 包含数据库脚本
java.util竟然没有提供树(数据结构)的实现!让我这种拿来主义的懒人很不开心。 随手写了一个TreeNode,顺道实现了个对应的内存缓存框架,适用于数据量不大,更新也少但是反复要读的数据,比如模块信息/组织结构/...
通过dom4j解析大华组织树到数据库,将文件zzjg.xml改成自己的组织树xml,打下断点在System.out.println(departments);后面直接运行即可得到数据(departments),注释的代码是用来添加到数据库的,仅供参考。时间很赶...
TreeNode.java 标准模版 public class TreeNode { /** 用于树在默认选中时检索的隔开标识 如:1@2@3 or 1@1-1@1-1-1 格式:一级节点ID@二级节点ID@三级节点ID@.....@N级节点ID*/ public static final String ...
主要为大家详细介绍了Java实现简单树结构的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一个导出组织架构的excel报表的实现,自动计算合并单元格,支持无限级树导出,其中主要涉及组合模式和一系列算法
使用jdbc查询结果,使用递归生成前端所需要的树形json数据,用SpringMVC传送数据到前端,前端接收,引入相关js文件,在画面上接收后端传输的数据,使用js动态渲染到画面中。有疑问随时私信我即可。
组织树机构数据递归后台开发方便前端调用。组织树机构数据递归后台开发方便前端调用。
动态增加组织树形结构图
根据查询的数据,根据上下级关系自动生成组织机构树形图行。
主要为大家详细介绍了java实现递归菜单树,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
亨利•凯特以代理商的身份加入沃凯公司的时候,最让人头痛的事情莫过于好不容易找到一家客户,然而却要等上好几个月时间,让公司评估承保风险,给保单定价。 随着现代信息技术的发展,沃凯公司开始在业务过程中采用...
根据java的引用特性获取树形json,避免使用递归算法 原始数据: {"id":1,"name":"树节点1","pId":0} {"id":2,"name":"树节点2","pId":1} {"id":3,"name":"树节点3","pId":1} {"id":4,"name":"树节点4","pId":2} {"id":...
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import ...