新建一个类   RecursiveRescreening.java。

参考如下类,即可重新拆分树形数据构造前台所需的新的树形数据。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;public class RecursiveRescreening {public static void main(String[] args) {String jsonStr = "[{\"num\":\"1000\",\"name\":\"*******责任有限公司\",\"superiorDept\":\"-1\",\"leaderPerNums\":[],\"children\":[{\"num\":\"101\",\"name\":\"综合部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\",\"6\"],\"children\":[{\"num\":\"3\",\"name\":\"周士大夫波\"},{\"num\":\"4\",\"name\":\"王玉11玲\"},{\"num\":\"5\",\"name\":\"于霞飞\"},{\"num\":\"6\",\"name\":\"康芳芳\"},{\"num\":\"7\",\"name\":\"冯亚11鑫\"},{\"num\":\"8\",\"name\":\"侯素蓉\"},{\"num\":\"9\",\"name\":\"关玲玲\"},{\"num\":\"10\",\"name\":\"高磊\"},{\"num\":\"11\",\"name\":\"董晓虹\"},{\"num\":\"42\",\"name\":\"左素平\"},{\"num\":\"64\",\"name\":\"杨雨欣\"},{\"num\":\"65\",\"name\":\"尚秀1忠\"},{\"num\":\"66\",\"name\":\"赵鹏伟\"}]},{\"num\":\"102\",\"name\":\"工程部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"12\",\"name\":\"李鹏1翔\"},{\"num\":\"13\",\"name\":\"张学东\"},{\"num\":\"14\",\"name\":\"邱继1国\"},{\"num\":\"15\",\"name\":\"胡肥东\"},{\"num\":\"16\",\"name\":\"张利锋\"},{\"num\":\"17\",\"name\":\"冯超博\"},{\"num\":\"18\",\"name\":\"刘勇\"},{\"num\":\"51\",\"name\":\"高1福强\"},{\"num\":\"58\",\"name\":\"韩程\"},{\"num\":\"59\",\"name\":\"刘凯峰\"},{\"num\":\"73\",\"name\":\"武康\"},{\"num\":\"74\",\"name\":\"马窦\"}]},{\"num\":\"103\",\"name\":\"研发一部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"20\"],\"children\":[{\"num\":\"20\",\"name\":\"柳江峰\"},{\"num\":\"21\",\"name\":\"马晶\"},{\"num\":\"22\",\"name\":\"李慧仙\"},{\"num\":\"23\",\"name\":\"崔耀强\"},{\"num\":\"24\",\"name\":\"陈星星\"},{\"num\":\"25\",\"name\":\"吕晓辉\"},{\"num\":\"26\",\"name\":\"郭文军\"},{\"num\":\"27\",\"name\":\"代靖\"},{\"num\":\"28\",\"name\":\"李跃跃\"},{\"num\":\"29\",\"name\":\"张力丰\"},{\"num\":\"49\",\"name\":\"李磊\"},{\"num\":\"52\",\"name\":\"胡懿\"},{\"num\":\"53\",\"name\":\"胡晓超\"},{\"num\":\"55\",\"name\":\"靳云南\"},{\"num\":\"56\",\"name\":\"张家玮\"},{\"num\":\"57\",\"name\":\"王文杰\"},{\"num\":\"60\",\"name\":\"刘利娜\"},{\"num\":\"61\",\"name\":\"张尧\"},{\"num\":\"62\",\"name\":\"董刚刚\"},{\"num\":\"63\",\"name\":\"李少华\"},{\"num\":\"69\",\"name\":\"杨瑞\"},{\"num\":\"70\",\"name\":\"张宇\"},{\"num\":\"72\",\"name\":\"王宇璐\"},{\"num\":\"76\",\"name\":\"杨世杰\"},{\"num\":\"77\",\"name\":\"武志亮\"}]},{\"num\":\"104\",\"name\":\"研发二部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"30\"],\"children\":[{\"num\":\"30\",\"name\":\"方利红\"},{\"num\":\"31\",\"name\":\"李跃峰\"},{\"num\":\"32\",\"name\":\"赵海青\"},{\"num\":\"33\",\"name\":\"周权\"},{\"num\":\"34\",\"name\":\"魏志强\"},{\"num\":\"35\",\"name\":\"任燕卿\"},{\"num\":\"36\",\"name\":\"郝鹏勇\"},{\"num\":\"37\",\"name\":\"李国君\"},{\"num\":\"38\",\"name\":\"郭伟\"},{\"num\":\"39\",\"name\":\"何延峰\"},{\"num\":\"40\",\"name\":\"吴文凯\"},{\"num\":\"41\",\"name\":\"高婧\"},{\"num\":\"67\",\"name\":\"卞有界\"},{\"num\":\"68\",\"name\":\"王瑞\"},{\"num\":\"75\",\"name\":\"贾志伟\"}]},{\"num\":\"105\",\"name\":\"生产部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\"],\"children\":[{\"num\":\"43\",\"name\":\"马泽\"},{\"num\":\"44\",\"name\":\"卢建安\"},{\"num\":\"71\",\"name\":\"马鸿飞\"}]},{\"num\":\"106\",\"name\":\"市场部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"2\",\"name\":\"孙晋汝\"},{\"num\":\"45\",\"name\":\"柳山峰\"},{\"num\":\"46\",\"name\":\"李旭\"},{\"num\":\"47\",\"name\":\"郭忠文\"},{\"num\":\"48\",\"name\":\"赵敏\"},{\"num\":\"50\",\"name\":\"陈智\"},{\"num\":\"54\",\"name\":\"武万怀\"}]},{\"num\":\"1001\",\"name\":\"未分组\",\"superiorDept\":\"1000\",\"leaderPerNums\":[],\"children\":[{\"num\":\"1\",\"name\":\"管理员\"}]}]}]";new RecursiveRescreening().rescreeningDeptAndPersonTree(jsonStr);}/*** String jsonStr* ="[{\"num\":\"1000\",\"name\":\"*******责任有限公司\",\"superiorDept\":\"-1\",\"leaderPerNums\":[],\"children\":[{\"num\":\"101\",\"name\":\"综合部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\",\"6\"],\"children\":[{\"num\":\"3\",\"name\":\"士大夫\"},{\"num\":\"4\",\"name\":\"王玉玲\"},{\"num\":\"5\",\"name\":\"于霞飞\"},{\"num\":\"6\",\"name\":\"康芳芳\"},{\"num\":\"7\",\"name\":\"冯亚鑫\"},{\"num\":\"8\",\"name\":\"侯素蓉\"},{\"num\":\"9\",\"name\":\"关玲玲\"},{\"num\":\"10\",\"name\":\"高磊\"},{\"num\":\"11\",\"name\":\"董晓虹\"},{\"num\":\"42\",\"name\":\"左素平\"},{\"num\":\"64\",\"name\":\"杨雨欣\"},{\"num\":\"65\",\"name\":\"尚秀忠\"},{\"num\":\"66\",\"name\":\"赵鹏伟\"}]},{\"num\":\"102\",\"name\":\"工程部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"12\",\"name\":\"李鹏翔\"},{\"num\":\"13\",\"name\":\"张学东\"},{\"num\":\"14\",\"name\":\"邱继国\"},{\"num\":\"15\",\"name\":\"胡肥东\"},{\"num\":\"16\",\"name\":\"张利锋\"},{\"num\":\"17\",\"name\":\"冯超博\"},{\"num\":\"18\",\"name\":\"刘勇\"},{\"num\":\"51\",\"name\":\"高福强\"},{\"num\":\"58\",\"name\":\"韩程\"},{\"num\":\"59\",\"name\":\"刘凯峰\"},{\"num\":\"73\",\"name\":\"武康\"},{\"num\":\"74\",\"name\":\"马窦\"}]},{\"num\":\"103\",\"name\":\"研发一部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"20\"],\"children\":[{\"num\":\"20\",\"name\":\"柳江峰\"},{\"num\":\"21\",\"name\":\"马晶\"},{\"num\":\"22\",\"name\":\"李慧仙\"},{\"num\":\"23\",\"name\":\"崔耀强\"},{\"num\":\"24\",\"name\":\"陈星星\"},{\"num\":\"25\",\"name\":\"吕晓辉\"},{\"num\":\"26\",\"name\":\"郭文军\"},{\"num\":\"27\",\"name\":\"代靖\"},{\"num\":\"28\",\"name\":\"李跃跃\"},{\"num\":\"29\",\"name\":\"张力丰\"},{\"num\":\"49\",\"name\":\"李磊\"},{\"num\":\"52\",\"name\":\"胡懿\"},{\"num\":\"53\",\"name\":\"胡晓超\"},{\"num\":\"55\",\"name\":\"靳云南\"},{\"num\":\"56\",\"name\":\"张家玮\"},{\"num\":\"57\",\"name\":\"王文杰\"},{\"num\":\"60\",\"name\":\"刘利娜\"},{\"num\":\"61\",\"name\":\"张尧\"},{\"num\":\"62\",\"name\":\"董刚刚\"},{\"num\":\"63\",\"name\":\"李少华\"},{\"num\":\"69\",\"name\":\"杨瑞\"},{\"num\":\"70\",\"name\":\"张宇\"},{\"num\":\"72\",\"name\":\"王宇璐\"},{\"num\":\"76\",\"name\":\"杨世杰\"},{\"num\":\"77\",\"name\":\"武志亮\"}]},{\"num\":\"104\",\"name\":\"研发二部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"30\"],\"children\":[{\"num\":\"30\",\"name\":\"方利红\"},{\"num\":\"31\",\"name\":\"李跃峰\"},{\"num\":\"32\",\"name\":\"赵海青\"},{\"num\":\"33\",\"name\":\"周权\"},{\"num\":\"34\",\"name\":\"魏志强\"},{\"num\":\"35\",\"name\":\"任燕卿\"},{\"num\":\"36\",\"name\":\"郝鹏勇\"},{\"num\":\"37\",\"name\":\"李国君\"},{\"num\":\"38\",\"name\":\"郭伟\"},{\"num\":\"39\",\"name\":\"何延峰\"},{\"num\":\"40\",\"name\":\"吴文凯\"},{\"num\":\"41\",\"name\":\"高婧\"},{\"num\":\"67\",\"name\":\"卞有界\"},{\"num\":\"68\",\"name\":\"王瑞\"},{\"num\":\"75\",\"name\":\"贾志伟\"}]},{\"num\":\"105\",\"name\":\"生产部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"42\"],\"children\":[{\"num\":\"43\",\"name\":\"马泽\"},{\"num\":\"44\",\"name\":\"卢建安\"},{\"num\":\"71\",\"name\":\"马鸿飞\"}]},{\"num\":\"106\",\"name\":\"市场部\",\"superiorDept\":\"1000\",\"leaderPerNums\":[\"2\"],\"children\":[{\"num\":\"2\",\"name\":\"孙晋汝\"},{\"num\":\"45\",\"name\":\"柳山峰\"},{\"num\":\"46\",\"name\":\"李旭\"},{\"num\":\"47\",\"name\":\"郭忠文\"},{\"num\":\"48\",\"name\":\"赵敏\"},{\"num\":\"50\",\"name\":\"陈智\"},{\"num\":\"54\",\"name\":\"武万怀\"}]},{\"num\":\"1001\",\"name\":\"未分组\",\"superiorDept\":\"1000\",\"leaderPerNums\":[],\"children\":[{\"num\":\"1\",\"name\":\"管理员\"}]}]}]";* * @param jsonStr* @return*/@SuppressWarnings("unchecked")public List<Map<String, Object>> rescreeningDeptAndPersonTree(String jsonStr) {List<Map<String, Object>> resultList = new ArrayList<>();try {List<Map<String, Object>> list = JSON.parseObject(jsonStr, List.class);// 获取所有部门List<Map<String, Object>> allDeptMapList = new ArrayList<>();// 获取所有人员List<Map<String, Object>> allPersonMapList = new ArrayList<>();degui(list, allDeptMapList, allPersonMapList);System.out.println(allDeptMapList);System.out.println(allPersonMapList);//部门编号和部门名称map集合Map<String, String> deptNumAndDeptNameMap = new HashMap<>();for (Map<String, Object> deptMap : allDeptMapList) {deptNumAndDeptNameMap.put((String) deptMap.get("num"), (String) deptMap.get("name"));}//获取到没有没有子部门的部门。List<String> deptNumList = new ArrayList<>();for (Map<String, Object> deptMap : allDeptMapList) {String deptNum = (String) deptMap.get("num");if ((boolean) deptMap.get("disabled")) {continue;}boolean isParentFlag = false;for (Map<String, Object> twoLeveldeptMap : allDeptMapList) {if (((String) twoLeveldeptMap.get("superiorDept")).equals(deptNum)) {isParentFlag = true;break;}}if (!isParentFlag) {deptNumList.add(deptNum);}}//遍历该集合构造所需树形数据for (String deptNum : deptNumList) {Map<String, Object> deptMap = new HashMap<>();//构造部门编号deptMap.put("num", deptNum);List<String> tmpDetpNumList = new ArrayList<>();//获取某个部门的所有上级部门编号(包括自己)getAllDeptNumList(deptNum, allDeptMapList, tmpDetpNumList);List<String> realDeptNumList = new ArrayList<>();//剔除根节点部门(山西博华科技有限公司)for (int i = tmpDetpNumList.size() -2;i >= 0; i--) {System.out.println("tmpDetpNumList.get(i):" + tmpDetpNumList.get(i));realDeptNumList.add(tmpDetpNumList.get(i));}System.out.println("realDeptNumList" + realDeptNumList);//构造某个部门和所有上级部门组成的名字String name = "";for (int i = 0; i < realDeptNumList.size(); i++) {String num = realDeptNumList.get(i);if (i == realDeptNumList.size() - 1) {name = name + deptNumAndDeptNameMap.get(num);} else {name = name + deptNumAndDeptNameMap.get(num) + "/";}}deptMap.put("name", name);List<Map<String, Object>> deptPersonMapList = new ArrayList<>();//获取该部门下人员listfor (Map<String, Object> personMap : allPersonMapList) {if (((String) personMap.get("deptNum")).equals(deptNum)) {deptPersonMapList.add(personMap);}}deptMap.put("children",deptPersonMapList);resultList.add(deptMap);}} catch (Exception e) {resultList = new ArrayList<>();e.printStackTrace();}System.out.println(resultList);System.out.println(JSON.toJSONString(resultList));return resultList;}/*** 拆分人员和部门树形数据获取所有人员和部门信息List* * @param list* @param allDeptMapList* @param allPersonMapList*/@SuppressWarnings("unchecked")public static void degui(List<Map<String, Object>> list, List<Map<String, Object>> allDeptMapList,List<Map<String, Object>> allPersonMapList) {String deptNum = "";if (allDeptMapList != null && allDeptMapList.size() > 0) {deptNum = (String) allDeptMapList.get(allDeptMapList.size() - 1).get("num");}for (Map<String, Object> map : list) {String num = (String) map.get("num");String name = (String) map.get("name");if (map.get("leaderPerNums") != null && map.get("children") != null) {// 部门有子部门或者人Map<String, Object> deptMap = new HashMap<>();String superiorDept = (String) map.get("superiorDept");deptMap.put("num", num);deptMap.put("name", name);deptMap.put("superiorDept", superiorDept);deptMap.put("disabled", false);allDeptMapList.add(deptMap);degui((List<Map<String, Object>>) map.get("children"), allDeptMapList, allPersonMapList);}if (map.get("leaderPerNums") != null && map.get("children") == null) {// 部门底下没人没子部门Map<String, Object> deptMap = new HashMap<>();String superiorDept = (String) map.get("superiorDept");deptMap.put("num", num);deptMap.put("name", name);deptMap.put("superiorDept", superiorDept);deptMap.put("disabled", true);allDeptMapList.add(deptMap);}if (map.get("leaderPerNums") == null && map.get("children") == null) {// 人Map<String, Object> personMap = new HashMap<>();personMap.put("num", num);personMap.put("name", name);personMap.put("deptNum", deptNum);allPersonMapList.add(personMap);}}}/*** 获取某个部门的所有上级部门* * @param deptNum* @param allDeptMapList* @param tmpDeptNumList*/public static void getAllDeptNumList(String deptNum, List<Map<String, Object>> allDeptMapList,List<String> tmpDeptNumList) {tmpDeptNumList.add(deptNum);for (Map<String, Object> deptMap : allDeptMapList) {String superiorDept = (String) deptMap.get("superiorDept");if ((deptNum.equals((String) deptMap.get("num"))) && (!"-1".equals(superiorDept))) {getAllDeptNumList(superiorDept, allDeptMapList, tmpDeptNumList);}}return;}
}

针对特定人员和部门树形数据,重新拆分构造新的树形数据思路。相关推荐

  1. 大数据产业中的新方式:数据交易

    目录 大数据产业中的新方式:数据交易 零和博弈 大数据产业中的新方式:数据交易 当今大数据已进入产业蓬勃发展,各类应用普及的新阶段.信息技术快速的更新换代以 及全球性疫情的持续,更促使人们被迫更快的适 ...

  2. DataScience:数据处理技术之针对时间序列数据衍变—构造时间滑动窗口数据的简介、代码实现、案例应用之详细攻略

    DataScience:数据处理技术之针对时间序列数据衍变-构造时间滑动窗口数据的简介.代码实现.案例应用之详细攻略 目录 时间滑动窗口数据的简介

  3. 关于数据中台建设,“新旧”两种思路对比

    数据中台是商业模式从IT时代进入DT时代的必然产物,是从流程驱动转向数据驱动的必然结果.以数据中台为导向,凭借数据证明或判断决策,形成数据服务思维,最终实现企业数字化转型. 数据中台建设模式颠覆了传统 ...

  4. 2022年新浪股票接口更新需要加Referer才能获取数据, java获取新浪股票数据 http://hq.sinajs.cn

    新浪股票 2022年更新后 java获取数据 引用 <dependency><groupId>cn.hutool</groupId><artifactId&g ...

  5. 对10亿个数据去重java_JAVA 8 新特性

    JAVA 8 新特性 一.Lambda 表达式 Consumer Predicate Function Supplier 二.stream 流 1. 获取流 2. 中间操作 1.1)map 把对应的操 ...

  6. 大数据下的BI新特性

    大数据下的BI新特性 大数据BI的新需求包括大量化(多个大数据集并行分析).多样化(结构化.半结构化.非结构化).快速化(Velocity)和价值(易用性).而计算分层(流计算.块计算.全局计算).快 ...

  7. 用友系统服务器坏了怎么恢复数据,如何恢复用友账套数据?

    用友账套恢复方法 : 一. 已没有数据库文件,只有账套备份: 1.如果有整个账套备份,直接使用系统管理里的帐套引入最新时间备份的账套就可以了. 2.如果是年度帐的备份,并且软件中还有这个帐套和年度的话 ...

  8. python 列表多行_Python Pandas list列表数据列拆分成多行的方法实现

    1.实现的效果 示例代码: df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]}) df Out[458]: A B 0 1 [1, 2] 1 2 [1, 2] ...

  9. 垂直拆分后,遇到瓶颈,数据水平拆分

    与垂直拆分对应的还有数据水平拆分,数据水平拆分就是把同一个表的数据拆分到两个数据库中,产生数据水平拆分的原因是某个业务的数据表的数据量或者更新量达到了单个数据库的瓶颈,这个时候就可以把表拆到两个或者多 ...

  10. 分布式数据库选型——数据水平拆分方案

    概述 水平拆分的概念随着分布式数据库的推广已为大部分人熟知.分库分表.异构索引.小表广播.这些功能几乎是产品功能需求标配.然而有些客户使用分布式数据库后的体验不尽如意. 本文尝试从数据的角度总结分布式 ...

最新文章

  1. 执行力的问题--系统的无奈
  2. 应用按home键无最近应用
  3. 小程序上线7天,罗胖带着1000万用户跑了……
  4. 预测未来 盘点大数据分析领域五大趋势
  5. wordpress archive.php,wordpress分类目录模板(archive.php)制作
  6. 什么?是Transformer位置编码
  7. w3c 菜鸟mysql_w3c菜鸟
  8. 0 win10重装partition_gpt分区无法安装win10的根本原因
  9. vue中播放flv流视频
  10. Oracle中joint,Nape中的LineJoint-线段关节
  11. 编程初学者为什么要选择python语言,哪些人群适合使用python
  12. 起风了数字简谱用计算机,起风了钢琴简谱-数字双手-买辣椒也用券 高橋優
  13. NPOI实现Word删除表格
  14. 泛函分析笔记1:度量空间
  15. 美团点评2020校招笔试题1(栈,堆)
  16. SQLServer表关联查询
  17. 第四章 前馈神经网络
  18. html如何图片立体自动旋转,html5如何实现图片的3D旋转效果
  19. IUCN濒危物种红色名录网址
  20. 团战可以输、提莫必须死 oj

热门文章

  1. Flask框架从入门到精通之消息闪现和日志记录(二十一)
  2. 小猫钓鱼纸牌游戏java_纸牌游戏----小猫钓鱼
  3. origin做主成分分析图_Origin如何进行主成分分析
  4. typecho添加html5视频播放器,DPlayer-Typecho视频播放插件
  5. 虚幻浏览器插件 播放视频
  6. 正弦余弦怎么用计算机计算公式,关于正弦函数和余弦函数的计算公式
  7. 一根竹子,4天的生长过程
  8. 用javascript为页面添加蒙版效果和弹出层
  9. 添加蒙版,分分钟搞定PPT封面
  10. mysql 创建同义词_Oracle synonym 同义词创建与删除