java中两个map的融合(两个map有相同字段)
生活随笔
收集整理的這篇文章主要介紹了
java中两个map的融合(两个map有相同字段)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
試想這樣一個場景: 數(shù)據(jù)庫表中 有 城市信息表 city_tbl; 有院士信息表 ?ys_tbl ,其中院士有城市id字段(id); 但是不是所有城市都有院士;?
我們想要得到 城市的詳細(xì)信息,包括院士個數(shù)且這些信息展現(xiàn)在同一張列表里面;
方法一: 查詢城市列表,然后在 依次發(fā)送sql 到 院士信息表 做相關(guān)統(tǒng)計,這是比較low 的做法。。就sql 數(shù)據(jù)庫而言,如果城市是400個的話,那么查詢時間 大約1分鐘;
方法二: 查詢城市列表; 用 select id as ID , count(1) ?as NUM 【不要用count(*) 】 from ys_tbl group by id 做分組統(tǒng)計; 這樣一來就可以得到 兩個 List<Map<String, Object>> ;剩下的處理流程如 下面的源碼所示。。
這樣處理的好處是,一、減少操作數(shù)據(jù)庫的次數(shù);二、 不需要做額外的查找操作除了 HashMap用到的 Hash查找算法外;這種效率非常高。
【源碼】
/*** 兩個map的融合* @author Tang Rong* @date 2017年9月23日*/ public class MapMergeTest {public static void main(String[] args) {List<Map<String, Object>> cityList = new ArrayList<>();String[] cities = new String[]{"北京", "上海", "廣州", "深圳", "成都"};;for (int i = 0; i < cities.length; i++) {Map<String, Object> map = new HashMap<>();map.put("ID", i);map.put("NAME", cities[i]);map.put("DESC", "描述" + i);cityList.add(map);}List<Map<String, Object>> numList = new ArrayList<>();/* 比如院士僅統(tǒng)計了上海,廣州,深圳(模擬數(shù)據(jù)) */int[] nums = new int[]{6, 9, 8};for (int i = 1; i < nums.length+1; i++) {Map<String, Object> map = new HashMap<>();map.put("ID", i);map.put("NUM", nums[i-1]);numList.add(map);}List<Map<String, Object>> result = fillNum(cityList, numList);for (Map<String, Object> m : result) {Iterator<String> it = m.keySet().iterator();while (it.hasNext()) {String key = it.next();System.out.print("[" + key +"] = " + m.get(key) + ", ");}System.out.println();}}// 填充一個map的人口數(shù)量到另外一個map(通過hash查找) public static List<Map<String, Object>> fillNum(List<Map<String, Object>> cityList, List<Map<String, Object>> numList) {List<Map<String, Object>> result = null;Map<String, Map<String, Object>> struct = new HashMap<>();/* 把 posList 拆解 到 Map容器中 */for (Map<String, Object> map : cityList) {struct.put(map.get("ID").toString(), map);}/* 對 numList 進(jìn)行拆解 */for (Map<String, Object> map : numList) {String rcrd_id = map.get("ID").toString();Map<String, Object> posMap = struct.get(rcrd_id);posMap.putAll(map);}return new ArrayList<Map<String, Object>>(struct.values());} }
【運行結(jié)果】
[ID] = 0, [DESC] = 描述0, [NAME] = 北京, [NUM] = 6, [ID] = 1, [DESC] = 描述1, [NAME] = 上海, [NUM] = 9, [ID] = 2, [DESC] = 描述2, [NAME] = 廣州, [NUM] = 8, [ID] = 3, [DESC] = 描述3, [NAME] = 深圳, [ID] = 4, [DESC] = 描述4, [NAME] = 成都,
總結(jié)
以上是生活随笔為你收集整理的java中两个map的融合(两个map有相同字段)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 顶尖称ip设置(顶尖秤ip设置)
- 下一篇: Java 截取反斜杠--java使用sp