巧用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());
}
相关推荐
黄雪超1 小时前
JVM——Java的基本类型的实现
java·开发语言·jvm
工业互联网专业1 小时前
基于web的可追溯果蔬生产过程的管理系统
java·vue.js·spring boot·毕业设计·源码·课程设计·可追溯果蔬生产过程的管理系统
程序猿大波2 小时前
基于Java,SpringBoot,HTML水文水质监测预警系统设计
java·开发语言·spring boot
海鸥812 小时前
在K8S迁移节点kubelet数据存储目录
java·kubernetes·kubelet
jackson凌3 小时前
【Java学习笔记】递归
java·笔记·学习
鑫—萍3 小时前
C++——入门基础(2)
java·开发语言·jvm·数据结构·c++·算法
Excuse_lighttime3 小时前
UDP数据包和TCP数据包的区别;网络编程套接字;不同协议的回显服务器
java·tcp/ip·udp
心若微尘4 小时前
C++23/26 静态反射机制深度解析:编译时元编程的新纪元
java·开发语言·c++23
金斗潼关4 小时前
使用Nexus搭建远程maven仓库
java·maven·nexus