通过平铺的原始树形结构数据,快熟构建节点的父子管理,完成树型结构数据的构建,一般在配合前段树形机构显示中有特殊需求的情况中使用。如果需要提出一个父子结构数据中部分数据,如果利用hibernate的级联查询,是很方面获取树形结构的全量,但要剔除部分数据就麻烦了,而且hinernate执行的时候是多个SQL,效率也差一些(不考虑缓存哈)。
原始数据结构:
ID,PID,NAME....
目标数据(json):
{
id:1
name:'NAME1',
children:[
{id:2,name:'name2',children:[...]}
]
}
好了,直接上代码先。
/** * 快速构建树结构 * * 非递归,使用2次循环完成构建。 * @author zhangpu * */ public class QuickTreeBuilder { public static void main(String[] args) { // 构建原始数据:这里为了简便,原始数据集合使用的也是Node对象, // 实际情况可以是其他任意entity,只需要在后面构建树时进行转化就OK List<Node> orginals = new ArrayList<Node>(); // parentId = 0 表示顶层,你也可以构建原始数据parentId=null是顶层,由你决定。 for (int i = 1; i <= 5; i++) { orginals.add(new Node(i, i - 1, "name" + i)); } // 构建一个Map,把所有原始数据的ID作为Key,原始数据对象作为VALUE Map<Integer, Node> dtoMap = new HashMap<Integer, Node>(); for (Node node : orginals) { // 如果原始数据对象不是Node,这里就可以直接写个conver转化 // 原始数据对象为Node,放入dtoMap中。 dtoMap.put(node.getId(), node); } List<Node> result = new ArrayList<Node>(); for (Map.Entry<Integer, Node> entry : dtoMap.entrySet()) { Node node = entry.getValue(); if (node.getParentId() == 0) { // 如果是顶层节点,直接添加到结果集合中 result.add(node); } else { // 如果不是顶层节点,找的起父节点,然后添加到父节点的子节点中 if (dtoMap.get(node.getParentId()) != null) { dtoMap.get(node.getParentId()).addChild(node); } } } // 如果有排序需求,可以在最后对输出的结构进行排序 // 打印结果数据 System.out.println(result); } static class Node { private int id; private int parentId; private String name; private List<Node> children = new ArrayList<Node>(); public Node() { } public Node(int id, int parentId, String name) { super(); this.id = id; this.parentId = parentId; this.name = name; } public void addChild(Node node) { this.children.add(node); } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getParentId() { return parentId; } public void setParentId(int parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<QuickTreeBuilder.Node> getChildren() { return children; } public void setChildren(List<QuickTreeBuilder.Node> children) { this.children = children; } @Override public String toString() { return "{id:" + id + ", parentId:" + parentId + ", name:" + name + ", children:" + children + "}"; } } }
相关推荐
决策树是一种基于树形结构的分类模型,它将特征空间划分为一系列非重叠的区域,并为每个区域分配一个标签。决策树的构建过程可以使用递归的方式实现。 我们定义了一个Node结构体来表示决策树的节点,其中feature_...
但是,这些意见数据只能以具有大量隐藏信息的非结构化格式获得。 情感分析是NLP中具有挑战性的任务之一,在NLP中,借助机器学习算法和语言建模,可以收集,处理和利用这些意见数据为用户提供更好的服务。 在本文中...
+ [树形DP](#树形dp) + [优化](#优化-1) * [计算几何](#计算几何) + [立体几何](#立体几何) + [计算几何思想](#计算几何思想) + [圆](#圆) + [半平面交](#半平面交) * [矩阵](#矩阵) + [矩阵](#矩阵-1) + ...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览数据、在对象...
对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...