使用HashSet<String>将map集合去重

简介: 使用HashSet<String>将map集合去重

在前面的博客中讲过用map做小实体,接收数据。现在业务要求是:对实体集合去重;

一、总体思想:


使用HashSet<String>将map集合去重。


1、取出List<Entity> oldList中的userId,用HashSet<String>removalManagerIdList集合接收,自动去重;(可借鉴:利用HashSet对数组去重)


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方法:

set实体泛型对象去重(重写实体hashCode、equal方法)






相关文章
|
4月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
25天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
13天前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
12天前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
2月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
2月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
2月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
2月前
|
存储 程序员 API
八股day05_API、String对象和集合
day05_API、String对象和集合
|
2月前
|
存储
|
2月前
|
安全 Java
【Java集合类面试五】、 如何得到一个线程安全的Map?
如何得到一个线程安全的Map的方法包括:使用Collections工具类将Map包装为线程安全,使用java.util.concurrent包下的ConcurrentHashMap,以及不推荐使用性能较差的Hashtable。