当前位置:   article > 正文

Java 处理Mysql获取树形的数据

Java 处理Mysql获取树形的数据

Mysql数据:

代码如下:

Entity

  1. @Data
  2. @Accessors(chain = true)
  3. public class Region {
  4. private BigInteger id;
  5. //名称
  6. private String name;
  7. //父id
  8. private BigInteger parentId;
  9. private List<Region> children;
  10. private Integer createTime;
  11. private Integer updateTime;
  12. private Integer isDeleted;
  13. }

 Service核心代码:

  1. List<Region> reginaList = regionMapper.findReginaList();
  2. //将数据以父类ID分组成map:{1:[xxx,xxx],2:[xxx,xxxx]}
  3. Map<BigInteger, List<Region>> parentIdMap = reginaList.stream().collect(Collectors.groupingBy(Region::getParentId, Collectors.toList()));
  4. //循环每个数据,从父类MAP中通过他的ID获取他的子类塞到children中
  5. reginaList.forEach(region -> addChildren(region, parentIdMap));
  6. //只筛选出最顶级数据
  7. List<Region> regions =
  8. reginaList.stream().filter(regina -> regina.getParentId().compareTo(BigInteger.ZERO) == 0).collect(Collectors.toList());
  9. private void addChildren(Region region, Map<BigInteger, List<Region>> parentIdMap) {
  10. List<Region> regions = parentIdMap.get(region.getId());
  11. if (regions != null) {
  12. region.setChildren(regions);
  13. regions.forEach(child -> addChildren(child, parentIdMap)); // 递归添加子级的子级
  14. }
  15. }

第二种写法:

  1. reginaList.stream().filter(city-> city.getParentId().compareTo(BigInteger.ZERO) == 0).peek(city -> city.setCityNames(getChildren(city,reginaList)))
  2. .collect(Collectors.toList());
  3. public List<Region> getChildren(Region region, List<Region> regionList) {
  4. List<Region> childrens = regionList.stream().filter(re -> re.getParentId().compareTo(region.getId()) == 0)
  5. .map(childRegion -> {
  6. childRegion.setAddressNames(getChildren(childRegion, regionList));
  7. return childRegion;
  8. }).collect(Collectors.toList());
  9. return childrens;
  10. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号