1. 功能需求 :
利用mybatis查询出结果集之后返回list<Map> ,如何将Map当中的key全部转换为大写的。
2. 分析
尝试从mybatis的typeHandler或者其他Handler出手? 或许可行。
第二,从返回到客户端的JSON之前进行全部转换-》多线程?
3. 今天,先讲述下第二种方案 :
先将map使用lamda表达式完成改装
// 把查询出来的Map的key 变为大写的 private static Map genChildParamMap(Object object) { if (object instanceof Map) { Map<String, Object> paramMap = (Map<String, Object>) JSONObject.toJSON(object); Map<String, Object> newMap = Maps.newHashMapWithExpectedSize(paramMap.size()); paramMap.entrySet().stream().filter(me -> me.getValue() != null).forEach(me -> newMap.put(me.getKey().toUpperCase(), genChildParamMap(me.getValue()))); return newMap; }else { return null; } }
然后对外部的LIST再次进行转换一次 :
/** * * 功能描述: * 把传递进来的List<Map> 结果集中的每一条Map的key变为大写的 * @param: List<Map<String,Object>> * @return: List<Map<String,Object>> * @date: 2018/11/13 14:12 */ public static List<Map> transfListMap(List<Map> sourceList){ List<Map> resultList = new ArrayList<>(Lists.newArrayListWithExpectedSize(sourceList.size())); sourceList.forEach( tranObj -> resultList.add(genChildParamMap(tranObj))); return resultList; }
测试如下 :
aResult = JsonUtil.transfListMap(aResult); // 转换key为大写的
我测试了下,对于本地的mysql的100000条记录的转换基本在1S左右。也许内存空间浪费比较大。
aResult = JsonUtil.transfListMap(aResult); // 转换key为大写的