巧用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());
}
相关推荐
静若繁花_jingjing1 分钟前
JVM常量池
java·开发语言·jvm
David爱编程37 分钟前
为什么线程不是越多越好?一文讲透上下文切换成本
java·后端
A尘埃1 小时前
Redis在地理空间数据+实时数据分析中的具体应用场景
java·redis
csxin1 小时前
Spring Boot 中如何设置 serializer 的 TimeZone
java·后端
杨过过儿1 小时前
【Task02】:四步构建简单rag(第一章3节)
android·java·数据库
青云交1 小时前
Java 大视界 -- Java 大数据分布式计算在基因测序数据分析与精准医疗中的应用(400)
java·hadoop·spark·分布式计算·基因测序·java 大数据·精准医疗
荔枝爱编程1 小时前
如何在 Docker 容器中使用 Arthas 监控 Java 应用
java·后端·docker
喵手1 小时前
Java中Stream与集合框架的差异:如何通过Stream提升效率!
java·后端·java ee
JavaArchJourney1 小时前
PriorityQueue 源码分析
java·源码
喵手2 小时前
你知道,如何使用Java的多线程机制优化高并发应用吗?
java·后端·java ee