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

简述

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

分组函数:Collectors.groupingBy()

开起多线程:list.parallelStream()

实例

以地区为例:

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

class District {
    private String code;
    private String name;
    private String parentCode;
    private List<District> children;
    //getter/setter...
}

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

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. lambda表达式构建各种

    2024-04-04 07:20:03       18 阅读
  2. Lambda表达式

    2024-04-04 07:20:03       27 阅读
  3. Lambda表达式

    2024-04-04 07:20:03       30 阅读
  4. Lambda 表达式

    2024-04-04 07:20:03       20 阅读
  5. Lambda表达式

    2024-04-04 07:20:03       15 阅读
  6. Lambda表达式

    2024-04-04 07:20:03       20 阅读
  7. lambda表达式

    2024-04-04 07:20:03       11 阅读
  8. Lambda表达式

    2024-04-04 07:20:03       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 07:20:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 07:20:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 07:20:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 07:20:03       18 阅读

热门阅读

  1. Rust 中的字符串类型:`&str` 和 `String`

    2024-04-04 07:20:03       14 阅读
  2. Cocos Creator 定时任务

    2024-04-04 07:20:03       15 阅读
  3. 数字资产与数据资产的区别

    2024-04-04 07:20:03       14 阅读
  4. 云原生数据库特征

    2024-04-04 07:20:03       11 阅读
  5. 对比传统交易模式与基于区块链的交易模式

    2024-04-04 07:20:03       12 阅读
  6. FreeRTPS 第二章 列表

    2024-04-04 07:20:03       12 阅读
  7. 精进TypeScript--习惯结构类型(Structual Typing)

    2024-04-04 07:20:03       16 阅读
  8. qt 窗体之间的调用

    2024-04-04 07:20:03       11 阅读
  9. 基于socket的回射服务器

    2024-04-04 07:20:03       11 阅读