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為大寫的