关于List<Map<String,Object>>结构数据去重的问题
问题描述
当数据结构为List<Map<String,Object>>时,我们如何进行集合中的去重操作呢????
第一:分析
此结构中,List中重复元素为Map,每个Map集合中的某一个Key的Value值重复,那么我们只需要将List遍历一遍,将每个Map中的那个重复Value的值拿出,然后进行存储,去重操作即可。
第二:代码实现
public static void main(String[] args) {
//1.模拟数据
List<Map<String,Object>> list = new ArrayList<>();
for (int i = 0; i < 9; i++) {
Map<String,Object> map = new HashMap<>();
map.put("no",i+"");
map.put("name","张三"+i);
list.add(map);
}
for (int i = 0; i < 9; i++) {
Map<String,Object> map = new HashMap<>();
map.put("no",i+"");
map.put("name","李四");
list.add(map);
}
//2.查看模拟数据
System.out.println(list);
//3.创建一个Map,用来去重
Map<String,Integer> map = new HashMap<>();
//4.保存去重结果
List<Map<String,Object>> resultList = new ArrayList<>();
//5.循环去重操作
for (Map<String,Object> suMap:list) {
String no = (String) suMap.get("no");
//6.该方法用来判断是否包含某一个KEY,用来去重
if(!map.containsKey(no)){
map.put(no,1);
resultList.add(suMap);
}
}
System.out.println(resultList);
}
第三:输出结果对比
[{no=0, name=张三0}, {no=1, name=张三1}, {no=2, name=张三2}, {no=3, name=张三3}, {no=4, name=张三4}, {no=5, name=张三5}, {no=6, name=张三6}, {no=7, name=张三7}, {no=8, name=张三8}, {no=0, name=李四}, {no=1, name=李四}, {no=2, name=李四}, {no=3, name=李四}, {no=4, name=李四}, {no=5, name=李四}, {no=6, name=李四}, {no=7, name=李四}, {no=8, name=李四}]
[{no=0, name=张三0}, {no=1, name=张三1}, {no=2, name=张三2}, {no=3, name=张三3}, {no=4, name=张三4}, {no=5, name=张三5}, {no=6, name=张三6}, {no=7, name=张三7}, {no=8, name=张三8}]
第四:总结
此种方法,循环一次便可进行去重操作,当然,其他的方式也有,不过目前是我在工作中用的一种方式,只为了记录下来,分享出去,以便有其他小伙伴遇到类似问题,提供一个思路而已。