前言
最近在工作遇到需要把List列表转化为Map嵌套的格式返回,在此做下记录。
业务场景
需要把数据库里存储的企业信息列表,转换为Map<企业区域编码,Map<企业类型,企业数据列表>>的结果返回,用作图标统计。
代码设计
Controller层:
/**
* 获取区域对应的企业MAP
*/
@PostMapping("/getAreaEntMap")
@ApiOperation(value = "获取区域对应的企业MAP", notes = "获取区域对应的企业MAP")
public Map<String, Map<String,List<QyxxBaseInfoQueryVo>>> getAreaEntMap(@Valid @RequestBody EntInfoQueryParam queryParam) {
return qyxxBaseInfoServiceImpl.getAreaEntMap(queryParam);
}
应用层:
public Map<String, Map<String, List<QyxxBaseInfoQueryVo>>> getAreaEntMap(@NonNull EntInfoQueryParam queryParam) {
//获取要处理的数据列表
List<QyxxBaseInfo> baseInfoList = qyxxBaseInfoDomain.getEntList(queryParam);
Map<String, Map<String, List<QyxxBaseInfoQueryVo>>> areaMap = new HashMap<>();
if (CollUtil.isNotEmpty(baseInfoList)) {
//实体列表转换为Vo列表
List<QyxxBaseInfoQueryVo> baseInfoQueryVoList = ConvertEntity2Vo.INSTANCE.qyxxBaseInfoList2VoList(baseInfoList);
//遍历构建Map
for (QyxxBaseInfoQueryVo ent : baseInfoQueryVoList) {
if (areaMap.get(ent.getDistrictCode()) == null) {
areaMap.put(ent.getDistrictCode(), new HashMap<>());
}
Map<String, List<QyxxBaseInfoQueryVo>> typeMap = areaMap.get(ent.getDistrictCode());
if (typeMap.get(ent.getEnterpriseTypeCode()) == null) {
typeMap.put(ent.getEnterpriseTypeCode(), new ArrayList<>());
}
typeMap.get(ent.getEnterpriseTypeCode()).add(ent);
}
}
return areaMap;
}
领域层:
/**
* 获取企业信息列表
*
* @param queryParam
* @return
*/
public List<QyxxBaseInfo> getEntList(@NonNull EntInfoQueryParam queryParam) {
QueryWrapper<QyxxBaseInfo> queryWrapper = Wrappers.<QyxxBaseInfo>query()
.in("enterprise_type_code", queryParam.getEntType())
.eq("deleted", 0)
.orderByDesc("created_time")
.in("district_code", queryParam.getAreaId());
return qyxxBaseInfoMapper.selectList(queryWrapper);
}
需要把数据列表处理成map嵌套的结果,可以参考上述方法,如有更好的方法欢迎大家留言讨论,谢谢!