将list组装成父子结构数据集

news/2024/7/4 15:00:43

utils-listTotree by fastjson

/**
 * listToTree
 * <p>方法说明<p>
 * 将JSONArray数组转为树状结构
 * @param arr 需要转化的数据
 * @param id 数据唯一的标识键值
 * @param pid 父id唯一标识键值
 * @param child 子节点键值
 * @return JSONArray
 */
public  JSONArray listToTree(JSONArray arr,String id,String pid,String child){
   JSONArray r = new JSONArray();
   JSONObject hash = new JSONObject();
   //将数组转为Object的形式,key为数组中的id
   for(int i=0;i<arr.size();i++){
      JSONObject json = (JSONObject) arr.get(i);
      hash.put(json.getString(id), json);
   }
   //遍历结果集
   for(int j=0;j<arr.size();j++){
      //单条记录
      JSONObject aVal = (JSONObject) arr.get(j);
      //在hash中取出key为单条记录中pid的值
      JSONObject hashVP = (JSONObject) hash.get(aVal.get(pid).toString());
      //如果记录的pid存在,则说明它有父节点,
      if(hashVP!=null){
         //检查是否有child属性
         if(hashVP.get(child)!=null){
            JSONArray ch = (JSONArray) hashVP.get(child);
            ch.add(aVal);
            hashVP.put(child, ch);
         }else{
            JSONArray ch = new JSONArray();
            ch.add(aVal);
            hashVP.put(child, ch);
         }
      }else{
         r.add(aVal);
      }
   }
   return r;
}

传入各个键 将列表 组装为 父子结构 tree

注:只适用于完整数据源 组装父子集时使用(非递归式)


http://www.niftyadmin.cn/n/4557380.html

相关文章

Turbo C++ 3.0

searchTurbo%20C%2B%2B%203.0&restype-1&id10000000&ty0&pattern0 ||| 我只会回答第一个问题http://www.onlinedown.net/soft/40883.htm&#xff08;华军绝对可靠&#xff09; ||| 发你邮箱了 没办法的&#xff09; 年代久远 不然会死机&#xff08;哎 turbo的…

docker容器中 -bash: yum: command not found 解决

找了好多的解决方案,操作繁琐且解决不了问题。 最后两行命令搞定 linux版本镜像下 依次执行 apt-get updateapt-get install yum

java.lang.NoClassDefFoundError: javax/transaction/TransactionManager

常见于项目搭建后,挂载到tomcat尝试运行时报出. 解决方法 1: 下载 jta.jar jta.jar下载 此链接当前可用,如不可用请自行度娘 2: 将解压后jar放到tomcat下的lib文件夹中 3:重新运行项目

怎样学习C++ 是理论重要还是实际草错重要啊gt;

学一门新的语言 通过编程慢慢理解 学习C语言必须在理论基础上 当然是在你先有理论这个基础之上 学语言最重要的还是注重实践好一点 反复实践 ||| 当然操作重要 用它编程 你要积极的去用它 加于深化 那些都是自己去领会的 我们在实践中可以学到很多书本上无法学到的东西 你了解一…

在VC环境下调试C程序的操作方法简介

||| file->new->Win32 Application->输入工程名&#xff08;可随便取&#xff09;->ok->finish->->new->csource file->文件名->0k之后把你的程序放进去 编译 然后进行连接 在其中写程序代码 这是主文件 然后新建.cpp文件 应建立控制台程序 &…

一个弹框的源码(含样式)

最近做了一个需要简单页面的模块,样式懒得调,找前端同学搞了个,简易可伸缩的弹框.以此文章记录,希望可以帮到遇到同样需求的后端同学. 样式如下 .dialog {width: 400px;position: absolute;top: 100px;left: 50%;z-index: 10000;margin-left: -200px;border: 1px solid #ddd;d…

谢谢了... 大家好 一些C语言的题有时间能帮我做做吗

答案补充 我用的是VS2005 答案补充 你那里不行的话 祝你好运 例如 a/b k[i]); printf("%d/n" " j); for(i0;i<n;i) printf("%d s; for(j2;j<1000;j) { n-1; sj; for(i1;i<j;i) { if((j%i)0) { n; ss-i; k[n]i; } } if(s0) { printf("%d its …

idea常用的插件

地品 1、Background Image Plus 换壁纸 2、Chinese(Simplified)… 中文语言包 3、Translation 代码翻译 4、Key Promoter X 快捷键提示插件 5、Rainbow bracket 彩虹括号插件 6、Code Glance 代码小地图 7、Walk Time / Statistic 代码统计插件 天品 1、String Manipulat…