如何过滤集合中的重复对象

sea000sea 2016-11-28 08:40:16
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String,Object>();
map.put("partNumber", "123");
map.put("chsDes", "abc");
Map<String, Object> map1 = new HashMap<String,Object>();
map1.put("partNumber", "456");
map1.put("chsDes", "xxx");
Map<String, Object> map2 = new HashMap<String,Object>();
map2.put("partNumber", "123");
map2.put("chsDes", "abc");
listMap.add(map);
listMap.add(map1);
listMap.add(map2);


类似于这样的集合,partNumber是唯一,对于这样的对象,如何过滤比较好?
...全文
419 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sea000sea 2016-12-05
  • 打赏
  • 举报
回复
引用 5 楼 u010890358 的回复:
重新整理一下。发现很多瑕疵 //循环出所有map 
for(int i=0;i<list.size;i++)
//迭代当前map
for(Map.entry entry: list.get(i).entrySet()
//循环出余下的所有map
for(int j=i+1;j<list.size;j++)
//目的为了把前面的map跟余下所有的map的Partnumber进行对比。 //循环后面的所有Map
for(Map.entry entry2:list.get(j).entrySet()) 
if(entry.getKey.equalsIgnore(entry2.getKey))
//如果存在相同则移除后一个的Partnumber 
entry2.remove(entry.getKey);
你这个思路可以。
vswen5 2016-11-29
  • 打赏
  • 举报
回复
map中不能有重复的key 会覆盖掉值。如果你不覆盖可以写一个if(map.get(key)!=null){return}
杨扬扬 2016-11-29
  • 打赏
  • 举报
回复
你的list应该使用hashmap,用你的map里面的value拼成key然后,然后作为hashmap的key,既可实现排重
qq_35712166 2016-11-29
  • 打赏
  • 举报
回复
重写一下对象的equals方法,然后将list强转成set应该可以去重吧。 只是提个想法没试过, 有问题别喷哈各位大神
  • 打赏
  • 举报
回复
那就把partNumber的值作为key,map作为value
青元子 2016-11-28
  • 打赏
  • 举报
回复
重新整理一下。发现很多瑕疵 //循环出所有map 
for(int i=0;i<list.size;i++)
//迭代当前map
for(Map.entry entry: list.get(i).entrySet()
//循环出余下的所有map
for(int j=i+1;j<list.size;j++)
//目的为了把前面的map跟余下所有的map的Partnumber进行对比。 //循环后面的所有Map
for(Map.entry entry2:list.get(j).entrySet()) 
if(entry.getKey.equalsIgnore(entry2.getKey))
//如果存在相同则移除后一个的Partnumber 
entry2.remove(entry.getKey);
青元子 2016-11-28
  • 打赏
  • 举报
回复
中间漏掉迭代entry2了。自行脑补吧
青元子 2016-11-28
  • 打赏
  • 举报
回复
我先提供一个思路吧比较麻烦。参考看看 //循环出所有map for(int i=0;i<list.size;i++) //迭代当前map for(Map.entry entry: list.get(i).entrySet() //循环出余下的所有map for(int j=1;j<list.size;j++) //把前面的map跟余下所有的map的Partnumber进行对比。 Map.entry entry2=list.get(j).entrySet(); if(entry.getKey.equalsIgnore(entry2.getKey)) //如果存在相同则移除后一个的Partnumber entry2.remove(entry.getKey); 大致思路是这样。手机码字。
sea000sea 2016-11-28
  • 打赏
  • 举报
回复
引用 1 楼 qq_24497925 的回复:
你这是既要比较key也要比较value吗
意思是把相同的map过滤掉就行
我是大混子 2016-11-28
  • 打赏
  • 举报
回复
你这是既要比较key也要比较value吗

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧