简述
利用jdk8 lambda表达式分组函数,可巧妙构建各种树,比如地区树,可以利用其多线程特性充分利用CPU提高性能。
分组函数:Collectors.groupingBy()
开起多线程:list.parallelStream()
实例
以地区为例:
首先定义一个Java实体,存储地区数据:
class District {
private String code;
private String name;
private String parentCode;
private List children;
//getter/setter...
}
以下为处理构建地区树的核心逻辑
List getDistrictTree() {
// 第一步:查询地区树
List districts = new A服务器托管rrayList();
// 第二步:根据parentCode进行分组(需过滤根节点),利用parallelStream()开起多线程处理
Map> 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());
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 请解释Redis是什么?它有哪些主要应用场景?Redis支持哪些数据类型?并描述每种数据类型的特性和使用场景。
请解释Redis是什么?它有哪些主要应用场景? Redis是一款内存高速缓存NoSQL数据库,使用C语言编写,它支持丰富的数据类型,如String、list、set、zset、hash等,并且这些数据类型都直接支持数据的原子性操作,如字符串的append、se…