介绍
这篇文章主要介绍了Java中列出根据id获取子节点的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
工作中因业务需求,将数据库中的树状结构的数据根据父节点获取所有的子节点
<强>实现思路强>
1。获取整个数据的列表集合数据
2。将数据分组,java8列表有groupby分组,java8之前的自己遍历整理
3。分组后递归获取子节点,有子节点的添加,没有的设置子节点并删除分组的数据,知道分组数据删完
<强>树。java 强>
@ data public class  Tree { private 才能Integer id; private 才能Integer pId; private 才能;String 关键; private 才能;String 价值; private 才能;List< Tree>, childList; }
<强> TreeUtils。java 强>
public class TreeUtils { static 才能;List< Tree>, trees ; static {才能 ,,,String jsonStr =,“(“+ ,,,,,,,,{\ \“id”: 100年,\“pId \“: 1, \“关键\“:\“根\“,,\“\“价值:,\“根\“},“+ ,,,,,,,,{\ \“id”: 1000年,\“pId \“: 100年,\“关键\“:\“node1 \“,, \“\“价值:,\“node1 \“},“+ ,,,,,,,,{\ \“id”: 2000年,\“pId \“: 100年,\“关键\“:\“node2 \”, \“\“价值:,\“node2 \“},“+ ,,,,,,,,{\ \“id”: 3000年,\“pId \“: 100年,\“关键\“:\“node3 \”, \“\“价值:,\“node3 \“},“+ ,,,,,,,,{\ \“id”: 1100年,\“pId \“: 1000年,\“关键\“:\“node11 \”, \“\“价值:,\“node11 \“},“+ ,,,,,,,,{\ \“id”: 1200年,\“pId \“: 1000年,\“关键\“:\“node12 \”, \“\“价值:,\“node12 \“},“+ ,,,,,,,,{\ \“id”: 1110年,\“pId \“: 1100年,\“关键\“:\“node111 \”, \“\“价值:,\“node111 \“},“+ ,,,,,,,,{\ \“id”: 1120年,\“pId \“: 1100年,\“关键\“:\“node112 \”, \“\“价值:,\“node112 \“},“+ ,,,,,,,,{\ \“id”: 2100年,\“pId \“: 2000年,\“关键\“:\“node21 \”, \“\“价值:,\“node21 \“},“+ ,,,,,,,,{\ \“id”: 2200年,\“pId \“: 2000年,\“关键\“:\“node22 \”, \“\“价值:,\“node22 \“},“+ ,,,,,,,,{\ \“id”: 2110年,\“pId \“: 2100年,\“关键\“:\“node211 \”, \“\“价值:,\“node21 \“}“+ ,,,,,,,,)“; ,,,trees =, JSONObject.parseArray (Tree.class jsonStr也); ,,} public 才能;static  void main (String [], args), { ,,,Tree Tree =, metaTree(树木,,100); ,,,/* * ,,,,*,Tree@6073f712 [id=100, pId=1,关键=根,价值=https://www.yisu.com/zixun/root, childList=[ *树(id=1000、pId=100键=node1价值=node1 childList=[ *树(id=1100、pId=1000=node11,关键价值=node11 childList=[ *树(id=1110、pId=1100=node111,关键价值=node111 childList=null), *树(id=1120、pId=1100=node112,关键价值=node112 childList=null)]), *树(id=1200、pId=1000=node12,关键价值=node12 childList=null)]), *树(id=2000、pId=100=node2,关键价值=node2 childList=[ *树(id=2100、pId=2000=node21,关键价值=node21 childList=[ *树(id=2110、pId=2100=node211,关键价值=node21 childList=null)]), *树(id=2200、pId=2000=node22,关键价值=node22 childList=null)]), *树(id=3000、pId=100=node3,关键价值=node3 childList=null)]] */system . out。println(“树:“+ ToStringBuilder.reflectionToString(树)); } 私有静态树metaTree(<树> treeList列表,整数id) {//此处getId getPId根据自己实际情况更改 树treeConfig=treeList.stream ()。过滤器(树-> tree.getId () .equals (id) .collect (Collectors.toList ()) . get (0); 地图<整数,列表<树>收集=treeList.stream ()。过滤器(类型-> type.getPId () !=null) .collect (Collectors.groupingBy树::getPId ()); 如果(收集!=null & & collect.size ()> 0) { 递归(收集、treeConfig); } 返回treeConfig; } 私有静态树递归(Map <整数,列表<树>地图,树树){ 如果(tree.getChildList ()==null) { null null null null null null null null null null null null null null null null null nullJava中列出根据id获取子节点的示例