巧用lambda表达式构建各种“树”

简述

利用jdk8 lambda表达式分组函数,可巧妙构建各种树,比如地区树,可以利用其多线程特性充分利用CPU提高性能。

分组函数:Collectors.groupingBy()

开起多线程:list.parallelStream()

实例

以地区为例:

首先定义一个Java实体,存储地区数据:

java 复制代码
class District {
    private String code;
    private String name;
    private String parentCode;
    private List<District> children;
    //getter/setter...
}

以下为处理构建地区树的核心逻辑

java 复制代码
List<District> getDistrictTree() {
    // 第一步:查询地区树
    List<District> districts = new ArrayList<>();
    // 第二步:根据parentCode进行分组(需过滤根节点),利用parallelStream()开起多线程处理
    Map<String, List<District>> map = districts.parallelStream()
            .filter(item -> item.getParentCode() != null)
            .collect(Collectors.groupingBy(District::getParentCode));
    // 第三步:遍历原数据集合,将分组的数据设置到children,此时便得到完整的树districts
    districts.parallelStream().forEach(item -> item.setChildren(map.get(item.getCode())));
    // 第三步:将所有非根节点过滤,即得到完整的树
    return districts.stream().filter(item -> item.getParentCode() == null).collect(Collectors.toList());
}
相关推荐
派大鑫wink8 小时前
【Day48】MyBatis 注解开发:替代 XML 映射文件
xml·java·mybatis
Gary董8 小时前
java死锁
java·开发语言
LiLiYuan.8 小时前
在资源管理器打开IDEA未进行版本管理的文件的方法
java·ide·intellij-idea
XXOOXRT8 小时前
基于SpringBoot-验证码
java·spring boot·后端
lvbinemail8 小时前
配置jenkins.service
java·运维·jenkins·systemctl
ss2738 小时前
若依分离版后端集成 Camunda 7 工作流引擎
java·若依
明天…ling8 小时前
sql注入(1-10关)
java·数据库·sql
Ashley_Amanda8 小时前
SAP调用Web Service全流程详解
java·前端·数据库
笨手笨脚の8 小时前
Linux JDK NIO 源码分析
java·linux·nio
顾北128 小时前
RAG 入门到实战:Spring AI 搭建旅游问答知识库(本地 + 阿里云百炼双方案)
java·人工智能·阿里云