使用HashSet將map集合去重
阿新 • • 發佈:2019-02-01
在前面的部落格中講過用map做小實體,接收資料。現在業務要求是:對實體集合去重;
一、總體思想:
使用HashSet<String>將map集合去重。
1、取出List<Entity> oldList中的userId,用HashSet<String>removalManagerIdList集合接收,自動去重;(可借鑑:)
2、新建List<Entity> newList,遍歷List<Entity> oldList 和 HashSet<String> removalManagerIdList,從List<Entity> oldList取出與HashSet<String> removalManagerIdList中對應的值,將新值儲存到List<Entity> newList;
二、細節:
1、外迴圈:HashSet<String> removalManagerIdList,內迴圈:List<Entity> oldList;
2、問題:內迴圈中有重複值,一個外迴圈的userId每遍歷一次內迴圈時,如果userId相同就會新建一個實體,這樣仍然達不到去重的效果;解決方法:外迴圈找到userId相同的內迴圈實體時,給新實體賦值後,停止遍歷內迴圈;
三、程式碼實現:
public void parseMap(List<AssetDeptManagerConfig> managerLists, AssetDeptManagerConfigVo assetDeptManagerConfigVo, List<HashMap<String, String>> mapList, String ManagerBizType) { // 使用HashSet<String>將map集合去重; HashSet<String> removalManagerIdList = new HashSet<>(); // 接收被去重的集合的userId for (HashMap<String, String> map : mapList) { removalManagerIdList.add(map.get("userId")); } // 遍歷HashSet<String>,對每個managerId賦值(此時的removalManagerIdList中沒有重複的userId) for (String removalManagerId : removalManagerIdList) { boolean equalTag = false; // 標識是否找到對應的userId for (HashMap<String, String> map : mapList) { if (map.get("userId").equals(removalManagerId)) { AssetDeptManagerConfig manager = new AssetDeptManagerConfig(); manager.setManagerId(map.get("userId")); manager.setManagerName(map.get("userName")); manager.setDeptId(assetDeptManagerConfigVo.getDeptId()); manager.setDeptName(assetDeptManagerConfigVo.getDeptName()); manager.setManagerBizType(ManagerBizType); manager.setManagerType(assetDeptManagerConfigVo.getManagerType()); manager.setOrgId(this.userService.getUser().getOrgId()); managerLists.add(manager); equalTag = true; // 找到userId,退出迴圈,進入下一個外迴圈; break; } } } }
四、其他方法:
為Entity重寫equal方法: