Java中列出根据id获取子节点的示例

  介绍

这篇文章主要介绍了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   null

Java中列出根据id获取子节点的示例