100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java实现树状结构解析

Java实现树状结构解析

时间:2024-02-26 01:37:56

相关推荐

Java实现树状结构解析

第一次实现了树状结构数据 记录自己的第一次

话不多说 直接上代码

数据库信息

代码实现

实体类public class ChainTree implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private Integer province;private String city;private String name;private List<ChainTree> children;//省略get set方法

package com.ruoyi.zhihui.controller;import mon.core.controller.BaseController;import mon.core.domain.AjaxResult;import com.ruoyi.system.domain.ChainTree;import com.ruoyi.system.mapper.SysDeptMapper;import com.ruoyi.zhihui.mapper.OtherMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;import java.util.Iterator;import java.util.List;@RestController@RequestMapping("/test")public class DeptController extends BaseController {@Autowiredprivate OtherMapper otherMapper;@GetMapping("/tree")public AjaxResult getTree() {//查询表所有信息List<ChainTree> trees = otherMapper.getTree();//创建空集合信息存放idList<Integer> integers = new ArrayList<>();//创建空的数据集合List<ChainTree> treeList = new ArrayList<>();//循环数据库查出来的数据for (ChainTree tree : trees) {//Integer集合存放 数据id信息integers.add(tree.getId());}//循环数据库查出来的数据for (ChainTree chainTree : trees) {//如果是顶级节点if (!integers.contains(chainTree.getProvince())) {//那么添加子节点addChildren(trees, chainTree);//将数据添加到刚才创建的空数据集合treeList.add(chainTree);}}//返回结果信息return AjaxResult.success(treeList);}/*** 给子节点添加数据** @param trees数据库的所有数据信息* @param chainTree 节点相同的当前数据*/private void addChildren(List<ChainTree> trees, ChainTree chainTree) {//子节点集合信息List<ChainTree> treeList = selectChildren(trees, chainTree);//设置子节点chainTree.setChildren(treeList);//查看子节点下面是否还有子节点数据for (ChainTree tree : treeList) {//如果子节点下面还有数据if (selectChildren(trees, tree).size() > 0) {//递归算法运行循环本身addChildren(trees, tree);}}}/*** 查询子节点是否有数据* 给子节点添加数据** @param trees数据库的所有数据信息* @param chainTree 节点相同的当前数据*/private List<ChainTree> selectChildren(List<ChainTree> trees, ChainTree chainTree) {//创建空的子节点集合List<ChainTree> treeList = new ArrayList<>();//使用迭代器 循环数据Iterator<ChainTree> chainTreeIterator = trees.iterator();//如果集合有数据while (chainTreeIterator.hasNext()) {//将数据赋值给对象ChainTree tree = chainTreeIterator.next();//如果节点相等if (tree.getProvince() == chainTree.getId()) {//添加进子节点treeList.add(tree);}}//返回子节点数据return treeList;}}

结果展示

{"msg": "操作成功","code": 200,"data": [{"id": 1,"province": 0,"city": "0","name": "中国","children": [{"id": 2,"province": 1,"city": "0.1","name": "河北省","children": [{"id": 5,"province": 2,"city": "0.1.2","name": "石家庄市","children": null},{"id": 6,"province": 2,"city": "0.1.2","name": "唐山市","children": null},{"id": 7,"province": 2,"city": "0.1.2","name": "秦皇岛市","children": null},{"id": 8,"province": 2,"city": "0.1.2","name": "邯郸市","children": null}]},{"id": 3,"province": 1,"city": "0.1","name": "山西省","children": [{"id": 9,"province": 3,"city": "0.1.3","name": "大同市","children": null},{"id": 10,"province": 3,"city": "0.1.3","name": "朔州市","children": null},{"id": 11,"province": 3,"city": "0.1.3","name": "忻州市","children": null},{"id": 12,"province": 3,"city": "0.1.3","name": "吕梁市","children": null}]},{"id": 4,"province": 1,"city": "0.1","name": "辽宁省","children": [{"id": 13,"province": 4,"city": "0.1.4","name": "沈阳市","children": null},{"id": 14,"province": 4,"city": "0.1.4","name": "大连市","children": null},{"id": 15,"province": 4,"city": "0.1.4","name": "鞍山市","children": null},{"id": 16,"province": 4,"city": "0.1.4","name": "抚顺市","children": null}]}]}]}

支持无限级联树,仅需要保证数据结构中id与province需要存在级联关系即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。