package com.jiuding.adminuser.util;import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.jiuding.adminuser.vo.TPermissionVo;import java.util.List;
import java.util.Map;public class TreeToolUtils {/**TPermissionVo 是我的javaBen,请换成自己的那个树节点对象对象中的属性主要需要的是自己的主键:private String id;//父级的主键private String parentId;//装子集的list,因为表示自关联所以list对象也是自己private List<TPermissionVo> list;*/
//根节点
private List<TPermissionVo> rootList; //根节点对象集合存放到这里 如:表中所有父节点都是0的    private List<TPermissionVo> bodyList; //其他节点存放到这里,可以包含根节点public TreeToolUtils(List<TPermissionVo> rootList, List<TPermissionVo> bodyList) {this.rootList = rootList;this.bodyList = bodyList;}public TreeToolUtils() {}public List<TPermissionVo> getTree(){   //调用的方法入口if(bodyList != null && !bodyList.isEmpty()){//声明一个map,用来过滤已操作过的数据Map<String,String> map = Maps.newHashMapWithExpectedSize(bodyList.size());rootList.forEach(beanTree -> getChild(beanTree,map));return rootList;}return null;}public void getChild(TPermissionVo TPermissionVo,Map<String,String> map){List<TPermissionVo> childList = Lists.newArrayList();bodyList.stream().filter(c -> !map.containsKey(c.getId())).filter(c ->c.getParentId().equals(TPermissionVo.getId())).forEach(c ->{map.put(c.getId(),c.getParentId());getChild(c,map);childList.add(c);});TPermissionVo.setList(childList);}
}
//使用: 创建一个对象
//list是装所有父节点的
//list2是装所有子节点的TreeToolUtils utils =  new TreeToolUtils(list,list2);List<TPermissionVo> result =  utils.getTree();
//result 就是返回的 树集合[{"id": "0d311a16aa71461dadfc62f0d27682be","createBy": "10296c662e8a4628a6b5ac65a1609ba9","createTime": "2019-10-08 17:11:32","delFlag": null,"updateBy": null,"updateTime": null,"name": "关系分析","parentId": "0","sortOrder": 1,"module": 1,"style": "","icon": "","path": "","status": 0,"url": "guanxifenxi","list": [{"id": "c8e4be1cae654de6bd6ceb1225d6fcc0","createBy": "xxx","createTime": "2019-10-18 15:30:33","delFlag": null,"updateBy": null,"updateTime": null,"name": "我是关系分析二级级菜单","parentId": "0d311a16aa71461dadfc62f0d27682be","sortOrder": 9999,"module": 1,"style": "","icon": "","path": "","status": 0,"url": "/queryDepartmentsssss","list": [{"id": "49abcca609a6444898adbb5746ab27bf","createBy": "xxx","createTime": "2019-10-18 15:30:51","delFlag": null,"updateBy": null,"updateTime": null,"name": "我是关系分析三级级菜单","parentId": "c8e4be1cae654de6bd6ceb1225d6fcc0","sortOrder": 9999,"module": 1,"style": "","icon": "","path": "","status": 0,"url": "/queryDepartm","list": [{"id": "9287f6a6b15b490f9126e77563050269","createBy": "xxx","createTime": "2019-10-18 15:42:49","delFlag": null,"updateBy": null,"updateTime": null,"name": "我是关系分析四级级菜单","parentId": "49abcca609a6444898adbb5746ab27bf","sortOrder": 9999,"module": 1,"style": "","icon": "","path": "","status": 0,"url": "/queryDepartm4","list": [],"bool": false}],"bool": false},{"id": "cd25ab0d7dc9460d8c761b3c3176169b","createBy": "xxx","createTime": "2019-10-18 15:31:12","delFlag": null,"updateBy": null,"updateTime": null,"name": "我是关系分析三级级菜单2","parentId": "c8e4be1cae654de6bd6ceb1225d6fcc0","sortOrder": 9999,"module": 1,"style": "","icon": "","path": "","status": 0,"url": "/queryDepartm2","list": [],"bool": false}],"bool": false}],"bool": true},{"id": "20f9d7d9ca9b40ecb585dca8446d7417","createBy": "10296c662e8a4628a6b5ac65a1609ba9","createTime": "2019-10-08 17:12:22","delFlag": null,"updateBy": null,"updateTime": null,"name": "联案分析","parentId": "0","sortOrder": 3,"module": 1,"style": "","icon": "","path": "","status": 0,"url": "textr","list": [],"bool": true}]

json树逆向生成list集合

//    装子节点集合private static List<JSONObject> childMenu=new ArrayList<JSONObject>();private List<JSONObject> adasd(JSONObject object,String pid){if (!object.isEmpty()){JSONObject data = object.getJSONObject("data");data.put("pid",pid);String id = data.getString("id");childMenu.add(data);
//            System.err.println("data的数据:"+data);JSONArray children = object.getJSONArray("children");
//            System.err.println("节点的数据:"+children);if (!children.isEmpty()&&children.size()>0){for (Object child : children){adasd((JSONObject)child,id);}}}return childMenu;}

数据:

{"root": {"data": {"id": "c1lg9acr6wo0","created": 1585295229212,"text": "中心主题"},"children": [{"data": {"id": "c1lh5vxprfk0","created": 1585297783845,"text": "分支1主题"},"children": [{"data": {"id": "c1lh621gnuw0","created": 1585297797132,"text": "分支1的分支1主题"},"children": [{"data": {"id": "c1lh66h48w00","created": 1585297806786,"text": "分支1的分支1的分支1主题"},"children": []}]}, {"data": {"id": "c1lh6fzwdm80","created": 1585297827513,"text": "分支1的分支2主题"},"children": []}]}, {"data": {"id": "c1lh6l0hzh40","created": 1585297838433,"text": "分支3主题"},"children": [{"data": {"id": "c1lh712oe800","created": 1585297873393,"text": "分支3的分支主题","layout_right_offset": {"x": 38,"y": 22}},"children": []}]}, {"data": {"id": "c1lh6tu6qcg0","created": 1585297857642,"text": "分支2主题"},"children": []}]},"template": "default","theme": "fresh-blue","version": "1.4.43"
}
使用 obj为上面的json字符串childMenu.clear();System.err.println(obj);List<JSONObject> adasd=new ArrayList<>();if (obj!=null){JSONObject root = obj.getJSONObject("root");//处理数据adasd = adasd(root,"root");}

java工具封装树形对象,常用于菜单 json树逆向生成list集合相关推荐

  1. java ztree json_java 树形转换JSON 工具类 / 树形子父级菜单递归 JSON 格式

    实体类: package tree; import java.util.List; /** * *2018-11-30 */ public class Menu { // 菜单id private S ...

  2. Java如何封装JDK_java7JDK的常用封装类型

    Java Scanner类 Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序.它是以前的StringTokenizer和Matcher类之间的某种结合.由 ...

  3. Java工具封装:Html、Css、Javascript文件内容压缩

    文章目录 1. Javascript压缩 1.1 closure-compiler 2. Html压缩 2.1 htmlcompressor 3. Css压缩 3.1 yuicompressor 1. ...

  4. 超简单,一行代码解决:如何快速将Excel表格数据,映射到Java中的ListVO对象,然后转存数据库,生成SQL脚本

    前言-真的很快速,之前用的是Apache下的Jar包,用起来太麻烦了 <dependency><groupId>org.apache.poi</groupId>&l ...

  5. java xml最火的的工具_几种高效的Java工具类推荐

    本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...

  6. java递归生成树结构_突破CRUD | 万能树Java工具类封装(源码)

    0.学完本文你或许可以收获 感受一个树工具从初始逐步优化完善的过程 树工具封装的设计思考与实现思路 最后收获一款拿来即用的树工具源代码 对于前端树组件有一定了解和使用过的同学可直接跳跃到第3章节开始. ...

  7. java常用工具类和Hutool常用的工具类整理

    java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...

  8. java中遍历树形菜单,你可能不知道还有这样的方法

    版权声明:本文为CSDN博主「穆雄雄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/qq_34137397/ ...

  9. java excel 插件开发工具_程序员常用的15 种开发者工具推荐

    程序员常用的15 种开发者工具推荐:Java 线上诊断工具 Arthas.IDE 插件 Cloud Toolkit.混沌实验注入工具 ChaosBlade.Java 代码规约扫描插件.应用实时监控工具 ...

最新文章

  1. 一篇文看懂Hadoop
  2. MySQL binlog
  3. Vmware Tools安装之Ubuntu7.10问题解决--持续更新中
  4. mac终端连接linux中断,Mac电脑iTerm2链接Linux服务器断线解决方案
  5. 人工智能超强面经:文本检测与GAN篇(含答案)
  6. C++基础知识(三)—— 常量
  7. .NET 开发系统 -知识 点
  8. 路径太深 无法删除文件夹 之解决办法
  9. Matlab计算标准时间格式下时间差
  10. 一淘商品类目预测[转载]
  11. 产品读书《长尾理论》
  12. EVE上传Dynamips和IOL
  13. 金庸《倚天屠龙记》中的一个瑕疵
  14. 国产手机干翻苹果?原来是靠百元机和猛降价实现的
  15. 人生之路 — 成长轨迹
  16. Visual Studio 2017十五项新功能体验
  17. chp6面向对象三大特性 题目7 考点:继承、访问修饰符
  18. 附件上传在IE中的问题
  19. 你的灵魂画作都去哪儿了?“猜画小歌”背后的5000万组数据
  20. 微软强制移除旧版Edge后,已卸载新版Edge,要如何恢复

热门文章

  1. 拒绝平庸 保罗格雷厄姆_保罗·格雷厄姆(Paul Graham):微软无法处理Y组合器
  2. 单点登录cas-4.0.0 只是简单的同时登入,同时登出功能
  3. 广告业务系统 之 数据中转站 —— “日志中心-实时服务监控”
  4. Win10笔记本触控板关闭/打开
  5. 利用秀米的SVG布局的穿透功能实现横屏长图互动原理+教程
  6. 比MySQL快839倍!揭开分析型数据库JCHDB的神秘面纱
  7. UE4 皮革材质从简单到复杂
  8. Linux下的硬件驱动——USB设备配置以及开发
  9. mysql 用update insert_mysql 一些insert/update的用法
  10. 云化要求下,数据库架构的演进