java 数据库 list_java—将数据库读取的list转tree

一、引言

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

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

12a175f6a1b1cfc217f623bedeeb48d1.png

图(1)

d02773bb23ad391ecc995366c3b75d79.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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值