将数据库树形记录转为java 树形数据结构

本文介绍了一种将列表数据转换为树形结构的算法实现。该算法通过遍历列表找到根节点并递归构建子节点的方式,实现了从简单列表到复杂树结构的数据转换。适用于多种需要展示层级关系的应用场景。
    /**
	 * 转换为Tree结构
	 * @param treedata
	 * @return
	 */
	public static Tree toTreeList(List<Tree> treedata){
		Tree root = null;
		for(Tree node:treedata){
			String parentid = node.getParentid();
			if(parentid.equals("0"))
				root = node;
		    Tree parent = getTarget(treedata,parentid); 
		    if(parent != null){
		    	List<Tree> children = parent.getChildren();
		    	if(children == null){
		    		children = new ArrayList<Tree>();
		    		parent.setChildren(children);
		    	}
		        children.add(node);
		    }
		}
		return root;
	}
	/**
	 * 获得指定节点
	 * @param treedata
	 * @param id
	 * @return
	 */
	private static Tree getTarget(List<Tree> treedata,String id){
		for(Tree node:treedata){
			String _id = node.getId();
			if(_id.equals(id))
				return node;
		}
		return null;
	}

 

 

可以使用递归来将数据库中的省市区数据转为树形结构。 首先,需要定义一个类来表示地区信息: ``` public class Area { private Long id; private String name; private Long parentId; // getters and setters } ``` 接着,可以使用递归来构建树形结构: ``` public class AreaTreeBuilder { private List<Area> areaList; public AreaTreeBuilder(List<Area> areaList) { this.areaList = areaList; } public List<Area> build() { List<Area> result = new ArrayList<>(); Map<Long, List<Area>> childrenMap = new HashMap<>(); for (Area area : areaList) { Long parentId = area.getParentId(); if (parentId == null) { result.add(area); } else { List<Area> children = childrenMap.get(parentId); if (children == null) { children = new ArrayList<>(); childrenMap.put(parentId, children); } children.add(area); } } buildTree(result, childrenMap); return result; } private void buildTree(List<Area> parentList, Map<Long, List<Area>> childrenMap) { for (Area parent : parentList) { List<Area> children = childrenMap.get(parent.getId()); if (children != null) { parent.setChildren(children); buildTree(children, childrenMap); } } } } ``` 以上代码会先遍历所有的区域信息,将每个区域按照父节点进行分组,然后使用递归来构建树形结构。最后返回根节点的列表即可。 使用时,可以先从数据库中查询出所有的区域信息,然后调用 `AreaTreeBuilder` 的 `build()` 方法来构建树形结构: ``` List<Area> areaList = dao.selectAllAreas(); List<Area> tree = new AreaTreeBuilder(areaList).build(); ``` 注意,以上代码中的 `Dao` 是一个示例,需要根据实际情况进行替换。同时,为了简化代码,省略了一些异常处理和类型换等细节。实际应用中需要根据具体情况进行调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值