Java 处理Mysql获取树形的数据

Mysql数据:

代码如下:

Entity:

复制代码
@Data
@Accessors(chain = true)
public class Region {
    private BigInteger id;
    //名称
    private String name;
    //父id
    private BigInteger parentId;
    private List<Region> children;
    private Integer createTime;
    private Integer updateTime;
    private Integer isDeleted;
}

Service核心代码:

复制代码
List<Region> reginaList = regionMapper.findReginaList();

        //将数据以父类ID分组成map:{1:[xxx,xxx],2:[xxx,xxxx]}
        Map<BigInteger, List<Region>> parentIdMap = reginaList.stream().collect(Collectors.groupingBy(Region::getParentId, Collectors.toList()));

        //循环每个数据,从父类MAP中通过他的ID获取他的子类塞到children中
        reginaList.forEach(region -> addChildren(region, parentIdMap));

        //只筛选出最顶级数据
        List<Region> regions =
                reginaList.stream().filter(regina -> regina.getParentId().compareTo(BigInteger.ZERO) == 0).collect(Collectors.toList());


 private void addChildren(Region region, Map<BigInteger, List<Region>> parentIdMap) {
        List<Region> regions = parentIdMap.get(region.getId());
        if (regions != null) {
            region.setChildren(regions);
            regions.forEach(child -> addChildren(child, parentIdMap)); // 递归添加子级的子级
        }
    }

第二种写法:

复制代码
        reginaList.stream().filter(city-> city.getParentId().compareTo(BigInteger.ZERO) == 0).peek(city -> city.setCityNames(getChildren(city,reginaList)))
  .collect(Collectors.toList());


    public List<Region> getChildren(Region region, List<Region> regionList) {
        List<Region> childrens = regionList.stream().filter(re -> re.getParentId().compareTo(region.getId()) == 0)
                .map(childRegion -> {
                    childRegion.setAddressNames(getChildren(childRegion, regionList));
                    return childRegion;
                }).collect(Collectors.toList());
        return childrens;
    }
相关推荐
一路往蓝-Anbo8 分钟前
【第42期】调试进阶(一):IDE中的Register与Memory窗口
c语言·开发语言·ide·stm32·单片机·嵌入式硬件
m0_7482495414 分钟前
Java 语言提供了八种基本类型【文123】
java·开发语言·python
移幻漂流19 分钟前
Kotlin 如何解决 Java 的核心痛点:现代语言特性的深度剖析
java·python·kotlin
leikooo21 分钟前
ShardingSphere 下更新分片键导致的失败问题分析与解决
java·spring·apache
a程序小傲23 分钟前
中国邮政Java面试被问:Netty的FastThreadLocal优化原理
java·服务器·开发语言·面试·职场和发展·github·哈希算法
jay神27 分钟前
基于Java的水果网上订购平台
java·mysql·vue·springboot·计算机毕业设计
淦。。。。27 分钟前
题解:P14013 [POCamp 2023] 送钱 / The Generous Traveler
开发语言·c++·经验分享·学习·其他·娱乐·新浪微博
小北方城市网30 分钟前
SpringBoot 集成 MyBatis-Plus 实战(高效 CRUD 与复杂查询):简化数据库操作
java·数据库·人工智能·spring boot·后端·安全·mybatis
小白不会Coding32 分钟前
一文详解JVM中类的生命周期
java·jvm·类的生命周期
橙露32 分钟前
C#在视觉检测中的优势:工业智能化转型的利器
开发语言·c#·视觉检测