JAVA如何转换树结构数据代码实例_java

来源:脚本之家  责任编辑:小易  

//是类似这种吗//控制层使用JSONArray jsonObject=JSONArray.from

在实战开发中经常有需要处理树形菜单、树形目录等等等业务需求。而对于这种产品,在设计数据库时也建议使用id<----->parentId的结构来做。但是最终前端显示多用hightChart或者Echart插件来实现。所以在给前端数据时,最好的做法就是把数据库结构话的数据处理成treeJson格式。

1、准备表结构及对应的表数据a、表结构:create table TB_TREE(C

第一步:引入fastjson

首先查询的时候最好按照id的大小排序,应该是越小的是父节点,越大的是子节点,升序才好用下面的方法

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency>

这是代码,你可以自己调试一下。数据结构如下:CREATE TABLE dtree (

第二步:用到了工具内的JSONPath

你使用根节点?一般根节点都是接口,怎么可能实例化,一般在设计的时候这种情况是被考虑的,所以很多时候我

JSONPath使用教程

炒肉丝要想不粘锅得从两方面来预防:养护锅具:新购买的炒锅和砂锅一样需要开锅养护。首先用热水清洗干净炒锅,小火将炒锅内的水分烘干,用筷子夹一块肥猪肉,继续开小火像涂抹肥皂一样用肥肉煸出的猪油将锅子内部擦拭一遍。然后重复热水冲洗、猪肉擦拭的步骤2-3次,最后你会发现锅子内部越来越亮,这样养护之后的锅在炒肉过程中不沾性能更好。用过一段时间后的炒锅如果开始粘锅则可以通过用姜片擦拭的方式来提升不粘性能:炒锅清洗干净后开大火,将锅子烧到微微冒烟后用大片的老姜细细的将锅子擦拭一遍,用姜汁润泽锅具可以一定程度上改善炒菜粘锅的情况。肉丝的腌制:很多文章都在说如何腌制肉丝才能让肉丝的口感更嫩,但其实肉丝的腌制也在

/** * 树转换 * * @param obj 需要转换的对象 * @param parentCodeFieldName 父标识字段名 * @param parentCode 父标识值 * @param currentCodeFieldName 当前标识字段名 * @param childrenFiledName 子树的字段名 * @param c 需要转换的Class类型 * @param <T> 泛型 * @return 返回List<T> */ public static <T> List<T> tree(Object obj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName, Class<T> c) { long t1 = System.currentTimeMillis(); String jsonStr = JSON.toJSONString(obj); log.debug("树转换开始 >>>>>>>>>>>>>>>> {}", JSON.toJSONString(obj)); //获取第一层级的数据 JSONArray jsonArray = (JSONArray) JSONPath.read(jsonStr, "$[" + parentCodeFieldName + "=" + parentCode + "]"); if (CollectionUtils.isEmpty(jsonArray)) { //为空的话直接返回空集合 return Lists.newArrayList(); } for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String code = jsonObject.getString(currentCodeFieldName); treeChildren(jsonStr, jsonObject, parentCodeFieldName, code, currentCodeFieldName, childrenFiledName); } List<T> list = JSONArray.parseArray(jsonArray.toString(), c); log.debug("树转换结束, 转换时间: {} ms . >>>>>>>>>>>>>>>> {}", (System.currentTimeMillis() - t1), JSON.toJSONString(list)); return list; } private static void treeChildren(String jsonStr, JSONObject currentJsonObj, String parentCodeFieldName, String parentCode, String currentCodeFieldName, String childrenFiledName) { JSONArray jsonArray = (JSONArray) JSONPath.read(jsonStr, "$[" + parentCodeFieldName + "=" + parentCode + "]"); if (CollectionUtils.isEmpty(jsonArray)) { return; } currentJsonObj.put(childrenFiledName, jsonArray); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String code = jsonObject.getString(currentCodeFieldName); treeChildren(jsonStr, jsonObject, parentCodeFieldName, code, currentCodeFieldName, childrenFiledName); } }

作为一名曾经的滴滴司机,首先分析一下为什么骂声不断。对于滴滴司机而言,骂的原因在于,滴滴的霸王条款,单方面的偏袒乘客,认为乘客就是上帝。乘客说什么就是什么。特别是服务分系统上线以来,差评扣分,投诉扣分,取消订单扣分。。反正就是乘客不舒服就是你司机的问题,我就要扣你分。扣分的结果跑过滴滴的都知道,一个90分的司机跟80分的司机呆在一块儿,来单了,90分的司机接到单子走了,你还在原地傻傻苦逼的等待单子。单量少,优质远程订单少,收入自然就少了,跑滴滴不就为了挣钱吗?辛辛苦苦,腰酸背痛的开一天车,最后一算全给你滴滴公司打工了。肯定骂声连连了。对于乘客而言,那是真把自己当上帝了,预期太高。叫个滴滴,想着

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

java 树形结构数据转换成list 急

用递归是可行的,就像文件管理系统 我当时用的就是递归

能写明白点么? 你这元素到底是什么啊?然后我好给你代码

java树形结构如何从数据库读取数据

定义一个TreeNode类.里面有

id 自身id

parentId 父节点id

name 树显示文本

url 链接地址

open 是否展开树

等属性.

将从数据库查出来的数据一个个set到TreeNode里面.封装成一个List<TreeNode>.

再将这个List转换成你的树所需要的格式内容.比如json格式追问能不能帮忙找到个案例! 我是新手不怎么会呢!

如何用Java实现树形结构啊?

package tree;

import java.util.LinkedList;

import java.util.List;

/**

* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历

*

* 参考资料0:数据结构(C语言版)严蔚敏

*

* 参考资料1:http://zhidao.baidu.com/question/81938912.html

*

* 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

public class BinTreeTraverse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

private static List<Node> nodeList = null;

/**

* 内部类:节点

*

* @author ocaicai@yeah.net @date: 2011-5-17

*

*/

private static class Node {

Node leftChild;

Node rightChild;

int data;

Node(int newData) {

leftChild = null;

rightChild = null;

data = newData;

}

}

public void createBinTree() {

nodeList = new LinkedList<Node>();

// 将一个数组的值依次转换为Node节点

for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {

nodeList.add(new Node(array[nodeIndex]));

}

// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树

for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {

// 左孩子

nodeList.get(parentIndex).leftChild = nodeList

.get(parentIndex * 2 + 1);

// 右孩子

nodeList.get(parentIndex).rightChild = nodeList

.get(parentIndex * 2 + 2);

}

// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理

int lastParentIndex = array.length / 2 - 1;

// 左孩子

nodeList.get(lastParentIndex).leftChild = nodeList

.get(lastParentIndex * 2 + 1);

// 右孩子,如果数组的长度为奇数才建立右孩子

if (array.length % 2 == 1) {

nodeList.get(lastParentIndex).rightChild = nodeList

.get(lastParentIndex * 2 + 2);

}

}

/**

* 先序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void preOrderTraverse(Node node) {

if (node == null)

return;

System.out.print(node.data + " ");

preOrderTraverse(node.leftChild);

preOrderTraverse(node.rightChild);

}

/**

* 中序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void inOrderTraverse(Node node) {

if (node == null)

return;

inOrderTraverse(node.leftChild);

System.out.print(node.data + " ");

inOrderTraverse(node.rightChild);

}

/**

* 后序遍历

*

* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已

*

* @param node

* 遍历的节点

*/

public static void postOrderTraverse(Node node) {

if (node == null)

return;

postOrderTraverse(node.leftChild);

postOrderTraverse(node.rightChild);

System.out.print(node.data + " ");

}

public static void main(String[] args) {

BinTreeTraverse2 binTree = new BinTreeTraverse2();

binTree.createBinTree();

// nodeList中第0个索引处的值即为根节点

Node root = nodeList.get(0);

System.out.println("先序遍历:");

preOrderTraverse(root);

System.out.println();

System.out.println("中序遍历:");

inOrderTraverse(root);

System.out.println();

System.out.println("后序遍历:");

postOrderTraverse(root);

}

}

java从数据库中查询数据,存储为树形结构,怎么做

以前用dtree写过一个,先把你数据库数据查出来,重点是确定父id跟子id都已经分好了,然后剩下的主要是在jsp里写树菜单就好了:给你参考下,下面那两个文件你可能没有,不过应该可以在网上下载的

<div class="dtree">

<p><a href="javascript: d.openAll();">展开</a> | <a href="javascript: d.closeAll();">关闭</a></p>

<script type="text/javascript">

d = new dTree('d',"${contextPath}/js/dtree/");

d.add(0,-1,'涉及问题选择');

<c:forEach items="${problemList}" var="pro">

var fid;

var config="${pro.content}";

fid = '${pro.fid}';

var id = '${pro.id}';

if(${pro.son}==0){

ss='+config,'${pro.content}','frame_right');

d.add('${pro.id}',fid,config,'${contextPath}/ajdj/ajdj_sjwtLj.do?config.id='+id,'${pro.content}','frame_right');

}else{

d.add('${pro.id}',fid,config,'','${pro.content}','frame_right');

}

</c:forEach>

document.write(d);

</script>

</div>


  • 本文相关:
  • java后台转换成树结构数据返回给前端的实现方法
  • java数据封装树形结构代码实例
  • java数据结构之链表、栈、队列、树的实现方法示例
  • java数据结构之树基本概念解析及代码示例
  • java数据结构之红黑树的真正理解
  • 使用递归算法结合数据库解析成java树形结构的代码解析
  • java数据结构排序算法之树形选择排序详解
  • java基本数据类型与封装类型详解(int和integer区别)
  • java使用分治算法实现排序数索引功能示例【二分搜索】
  • springboot配置文件的加载顺序解析
  • java调用openoffice将office系列文档转换为pdf的示例方法
  • java网上图书商城(4)购物车模块1
  • 基于spring + spring mvc + mybatis 高性能web构建实例详解
  • java中final,finally,finalize三个关键字的区别_动力节点java学院
  • spring中ioc优点与缺点解析
  • java实现aop面向切面编程的实例教程
  • spring boot springjpa 支持多个数据源的实例代码
  • java 树形结构数据转换成list 急
  • java树形结构如何从数据库读取数据
  • 如何用Java实现树形结构啊?
  • java从数据库中查询数据,存储为树形结构,怎么做
  • java从数据库中查询数据,存储为树形结构,怎么做?
  • 如何用Java拼接JSON方式遍历整个树形节点
  • java 递归数据库生成 树形结构问题
  • Java如何从数据库里读取一个树形表然后封装成list?
  • 哪位大侠可以帮我写一段java代码!是关于根据数据库里的数据来形成一个动态树形图
  • java 大数据树形结构
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页javajava后台转换成树结构数据返回给前端的实现方法java数据封装树形结构代码实例java数据结构之链表、栈、队列、树的实现方法示例java数据结构之树基本概念解析及代码示例java数据结构之红黑树的真正理解使用递归算法结合数据库解析成java树形结构的代码解析java数据结构排序算法之树形选择排序详解java基本数据类型与封装类型详解(int和integer区别)java使用分治算法实现排序数索引功能示例【二分搜索】springboot配置文件的加载顺序解析java调用openoffice将office系列文档转换为pdf的示例方法java网上图书商城(4)购物车模块1基于spring + spring mvc + mybatis 高性能web构建实例详解java中final,finally,finalize三个关键字的区别_动力节点java学院spring中ioc优点与缺点解析java实现aop面向切面编程的实例教程spring boot springjpa 支持多个数据源的实例代码java使double保留两位小数的多方java8 十大新特性详解java.net.socketexception: connjava写入文件的几种方法分享java环境变量的设置方法(图文教程java 十六进制与字符串的转换java list用法示例详解java中file类的使用方法javaweb实现文件上传下载功能实例java 字符串截取的三种方法(推荐decimalformat数字格式化用法详解javaweb开发之spring+springmvc+mybatis+intellij idea配置springboot的图文教程java中classloader类加载学习总结java实现人机猜拳小游戏详解java 七种创建单例的方法掷6面骰子6000次每个点数出现的概率java定时任务框架elasticjob详解maven下载jar包改用阿里云maven库的方法java中socket下载一个文本文件
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved