日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中两个map的融合(两个map有相同字段)

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中两个map的融合(两个map有相同字段) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

試想這樣一個場景: 數據庫表中 有 城市信息表 city_tbl; 有院士信息表 ?ys_tbl ,其中院士有城市id字段(id); 但是不是所有城市都有院士;?

我們想要得到 城市的詳細信息,包括院士個數且這些信息展現在同一張列表里面;

方法一: 查詢城市列表,然后在 依次發送sql 到 院士信息表 做相關統計,這是比較low 的做法。。就sql 數據庫而言,如果城市是400個的話,那么查詢時間 大約1分鐘;

方法二: 查詢城市列表; 用 select id as ID , count(1) ?as NUM 【不要用count(*) 】 from ys_tbl group by id 做分組統計; 這樣一來就可以得到 兩個 List<Map<String, Object>> ;剩下的處理流程如 下面的源碼所示。。

這樣處理的好處是,一、減少操作數據庫的次數;二、 不需要做額外的查找操作除了 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<>();/* 比如院士僅統計了上海,廣州,深圳(模擬數據) */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的人口數量到另外一個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 進行拆解 */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());} }

【運行結果】

[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] = 成都,


總結

以上是生活随笔為你收集整理的java中两个map的融合(两个map有相同字段)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。