博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java—将数据库读取的list转tree
阅读量:4984 次
发布时间:2019-06-12

本文共 2669 字,大约阅读时间需要 8 分钟。

一、引言

有时候我们从数据库中读取出了一个表的数据,比如存储的是中国的省市县的ID、名称与父节点ID,读出来的数据并不是前台想要的,这个时候我们要想法处理一下都出来的list,将它变为一个树。

比如直接查出来是图(1)的数据,我们要的效果是图(2)的数据

1662264-20190712114318630-1973562227.png
图(1)
1662264-20190712114402714-595209555.png
图(2)

二、使用过程

1、新建TreeNode实体类,对应数据库中的数据

public class TreeNode{      private String id;//本节点id    private String name;//本节点名称    private String parentId;//本节点的父节点    private List
children; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } public List
getChildren() { return children; } public void setChildren(List
children) { this.children = children; }}

2、新建TreeUtil类处理list(分别使用两层遍历与递归的方法实现)

public class TreeUtil {       /**      * 两层循环实现建树      * @param treeNodes 传入的树节点列表      * @return      */      public static List
bulid(List
treeNodes) { List
trees = new ArrayList
(); for (TreeNode treeNode : treeNodes) { if ("0".equals(treeNode.getParentId())) { trees.add(treeNode); } for (TreeNode it : treeNodes) { if (it.getParentId().equals(treeNode.getId()) ) { if (treeNode.getChildren() == null) { treeNode.setChildren(new ArrayList
()); } treeNode.getChildren().add(it); } } } return trees; } /** * 使用递归方法建树 * @param treeNodes * @return */ public static List
buildByRecursive(List
treeNodes) { List
trees = new ArrayList
(); for (TreeNode treeNode : treeNodes) { if ("0".equals(treeNode.getParentId())) { trees.add(findChildren(treeNode,treeNodes)); } } return trees; } /** * 递归查找子节点 * @param treeNodes * @return */ public static TreeNode findChildren(TreeNode treeNode,List
treeNodes) { treeNode.setChildren(new ArrayList
()); for (TreeNode it : treeNodes) { if(treeNode.getId().equals(it.getParentId())) { if (treeNode.getChildren() == null) { treeNode.setChildren(new ArrayList
()); } treeNode.getChildren().add(findChildren(it,treeNodes)); } } return treeNode; } }

3、将数据库中的数据保存到list数组中,调用TreeUtil中的处理函数

调用递归方法

TreeUtil.buildByRecursive(menuList);

调用两层遍历的方法

TreeUtil.bulid(menuList);

转载自:

转载于:https://www.cnblogs.com/JohnDawson/p/11175161.html

你可能感兴趣的文章
浅谈SpringMVC执行过程
查看>>
python中的字符串
查看>>
sql查询单个银行账号重复
查看>>
git命令集合
查看>>
Spring Boot使用AJAX从数据库读取数据异步刷新前端表格
查看>>
jackson json转list
查看>>
浅谈人人网以及淘宝网的IM即时通信以及消息推送
查看>>
[转] 获取刚插入的数据的自增列ID——IDSCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别(比较)...
查看>>
IDEA使用总结
查看>>
markdown 一个优雅的写作工具
查看>>
poj1064 Cable master(二分查找,精度)
查看>>
Python 基础篇:编码、变量、模块
查看>>
关于Intellij IDEA导入jdk出现异常
查看>>
HLS切片机
查看>>
单链表的反转
查看>>
习题3.5 求链表的倒数第m个元素(20 分)浙大版《数据结构(第2版)》题目集...
查看>>
1102. Invert a Binary Tree (25)
查看>>
MySQL 索引详解
查看>>
LinkedList,ArrayList末尾插入谁效率高?
查看>>
Spring-MVC理解之一:应用上下文webApplicationContext
查看>>