简述
利用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());
}