巧用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());
}
相关推荐
面朝大海,春不暖,花不开3 分钟前
自定义Spring Boot Starter的全面指南
java·spring boot·后端
得过且过的勇者y4 分钟前
Java安全点safepoint
java
夜晚回家39 分钟前
「Java基本语法」代码格式与注释规范
java·开发语言
斯普信云原生组1 小时前
Docker构建自定义的镜像
java·spring cloud·docker
wangjinjin1801 小时前
使用 IntelliJ IDEA 安装通义灵码(TONGYI Lingma)插件,进行后端 Java Spring Boot 项目的用户用例生成及常见问题处理
java·spring boot·intellij-idea
wtg44521 小时前
使用 Rest-Assured 和 TestNG 进行购物车功能的 API 自动化测试
java
白宇横流学长1 小时前
基于SpringBoot实现的大创管理系统设计与实现【源码+文档】
java·spring boot·后端
fat house cat_2 小时前
【redis】线程IO模型
java·redis
stein_java3 小时前
springMVC-10验证及国际化
java·spring
weixin_478689763 小时前
C++ 对 C 的兼容性
java·c语言·c++