1、根据两个或者多个key去重
public List<Map<String, String>> toDistinctList(List<Map<String, String>> list) {
//新建set集合,利用set集合元素不能重复特点,找出重复数据
Set<DispatchCommandsPo> keysSet = new HashSet<DispatchCommandsPo>();
//定义两个变量
String date = "";
String combine = "";
Iterator<Map<String, String>> it=list.iterator();
while(it.hasNext()) {
Map<String, String> map=it.next();
//变量用来保存两个key所对应的值
date = (String) map.get("CMD_DATE");
combine = (String) map.get("CMD_COMBINE");
//新建一个对象,并重写equals和hashcode方法
DispatchCommandsPo dispatchCommandsPo = new DispatchCommandsPo();
dispatchCommandsPo.setCMD_DATE(date);
dispatchCommandsPo.setCMD_COMBINE(combine);
int beforeSize = keysSet.size();
keysSet.add(dispatchCommandsPo);
int afterSize = keysSet.size();
//判断当前对象是否保存进set集合中(若未保存说明set集合已存在该数据,删除该条map数据)
if(afterSize != (beforeSize + 1)) {
it.remove();
}
}
return list;
}
DispatchCommandsPo.java:
package com.fh.po;
public class DispatchCommandsPo {
private String CMD_DATE;
private String CMD_COMBINE;
public String getCMD_DATE() {
return CMD_DATE;
}
public void setCMD_DATE(String cMD_DATE) {
CMD_DATE = cMD_DATE;
}
public String getCMD_COMBINE() {
return CMD_COMBINE;
}
public void setCMD_COMBINE(String cMD_COMBINE) {
CMD_COMBINE = cMD_COMBINE;
}
//重写hashcode方法
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (CMD_DATE == null ? 0 : CMD_DATE.hashCode());
result = 31 * result + (CMD_COMBINE == null ? 0 : CMD_COMBINE.hashCode());
return result;
}
//重写equals方法
@Override
public boolean equals(Object obj) {
if (obj instanceof DispatchCommandsPo) {
DispatchCommandsPo dispatchCommandsPo = (DispatchCommandsPo) obj;
if(CMD_DATE.equalsIgnoreCase(dispatchCommandsPo.getCMD_DATE().trim()) &&
CMD_COMBINE.equalsIgnoreCase(dispatchCommandsPo.getCMD_COMBINE().trim())) {
return true;
}
}
return false;
}
}
2、根据一个key去重
//对list集合进行去重(一个key值)
public List<Map<String, String>> toDistinctList(List<Map<String, String>> list) {
Set<String> keysSet = new HashSet<String>();
Iterator<Map<String, String>> it=list.iterator();
while(it.hasNext()) {
Map<String, String> map=it.next();
String date = (String) map.get("CMD_DATE");
int beforeSize = keysSet.size();
keysSet.add(date);
int afterSize = keysSet.size();
if(afterSize != (beforeSize + 1)) {
it.remove();
}
}
return list;
}
总结:上面就是list根据map值去重的方法,都是利用set集合元素不能重复来实现的,那么什么样的元素算是重复的呢,这时候就需要自己重写equals和hashcode方法。在代码的最后大家最好使用iterator的remove方法,使用for循环的话可能会出现去重不彻底的情况,也可以新建一个相同类型的list集合做add操作。