栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java list如何根据id获取子节点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java list如何根据id获取子节点

工作中因业务需求,将数据库中的树状结构的数据根据父节点获取所有的子节点

实现思路

1.获取整个数据的list集合数据

2.将数据分组,java8 list有groupby分组,java8之前的自己遍历整理

3.分组后递归获取子节点,有子节点的添加,没有的设置子节点并删除分组的数据,知道分组数据删完

Tree.java

@Data
public class Tree {
  private Integer id;
  private Integer pId;
  private String key;
  private String value;
  private List childList;
}

TreeUtils.java

public class TreeUtils {
  static List trees ;
  static {
    String jsonStr = "[" +
 "{"id":100,"pId":1,"key":"root", "value": "root"}," +
 "{"id":1000,"pId":100,"key":"node1", "value": "node1"}," +
 "{"id":2000,"pId":100,"key":"node2","value": "node2"}," +
 "{"id":3000,"pId":100,"key":"node3","value": "node3"}," +
 "{"id":1100,"pId":1000,"key":"node11","value": "node11"}," +
 "{"id":1200,"pId":1000,"key":"node12","value": "node12"}," +
 "{"id":1110,"pId":1100,"key":"node111","value": "node111"}," +
 "{"id":1120,"pId":1100,"key":"node112","value": "node112"}," +
 "{"id":2100,"pId":2000,"key":"node21","value": "node21"}," +
 "{"id":2200,"pId":2000,"key":"node22","value": "node22"}," +
 "{"id":2110,"pId":2100,"key":"node211","value": "node21"}" +
 "]";
    trees = JSONObject.parseArray(jsonStr, Tree.class);
  }

  public static void main(String[] args) {
    Tree tree = metaTree(trees, 100);
    
    System.out.println("tree:" + ToStringBuilder.reflectionToString(tree));
  }

  private static Tree metaTree(List treeList, Integer id) {
//此处getId getPId根据自己实际情况更改
    Tree treeConfig = treeList.stream().filter(tree -> tree.getId().equals(id)).collect(Collectors.toList()).get(0);
    Map> collect = treeList.stream().filter(type -> type.getPId() != null).collect(Collectors.groupingBy(Tree::getPId));
    if (collect != null && collect.size() > 0) {
      recursion(collect, treeConfig);
    }
    return treeConfig;
  }

  private static Tree recursion(Map> maps, Tree tree) {
    if (tree.getChildList() == null) {
      if (maps.get(tree.getId()) != null) {
 tree.setChildList(maps.get(tree.getId()));
 maps.remove(tree.getId());
 if (maps.size() > 0) {
   recursion(maps, tree);
 }
      }
    } else {
      List metaTypeList = tree.getChildList();
      if (metaTypeList != null && metaTypeList.size() > 0) {
 for (Tree meta : metaTypeList) {
   recursion(maps, meta);
 }
      }
    }
    return tree;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/134733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号