简述
利用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,此时便得到完整的树districtsdistricts.parallelStream().forEach(item -> item.setChildren(map.get(item.getCode())));// 第三步:将所有非根节点过滤,即得到完整的树return districts.stream().filter(item -> item.getParentCode() == null).collect(Collectors.toList());
}