1. 程式人生 > >使用HashSet將map集合去重

使用HashSet將map集合去重

    在前面的部落格中講過用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方法: