1、重写 Bean中的equals和hashCode方法,对象中那条属性,如下我的Bean中考虑这四条属性相同即为重复数据:(满足那些属性相同便要剔除就重写那些属性的equals和hashCode方法)。
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ReserveMasterForwebVo other = (ReserveMasterForwebVo) obj;
if (policyNo == null) {
if (other.policyNo != null)
return false;
} else if (!policyNo.equals(other.policyNo))
return false;
if (productCode == null) {
if (other.productCode != null)
return false;
} else if (!productCode.equals(other.productCode))
return false;
if (responsibility == null) {
if (other.responsibility != null)
return false;
} else if (!responsibility.equals(other.responsibility))
return false;
if (terms == null) {
if (other.terms != null)
return false;
} else if (!terms.equals(other.terms))
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((policyNo == null) ? 0 : policyNo.hashCode());
result = prime * result + ((productCode == null) ? 0 : productCode.hashCode());
result = prime * result + ((responsibility == null) ? 0 : responsibility.hashCode());
result = prime * result + ((terms == null) ? 0 : terms.hashCode());
return result;
}
/**
* 去重
* @param list
* @return
*/
public List check(List list){
Set set = new HashSet(list);
list.clear();
list.addAll(set);
return list;
}
/**
* 在 newDate中找到自身重复和source中已存在的重复数据剔除掉,并且返回剔除重复后的数据、不重复数量、重复数量、重复坐标(DuplicateRemoval、ErrorRow错误信息返回对象根据需求自行设置)
* @param source
* @param newDate
* @return
*/
public static DuplicateRemoval check2(List source, List newDate){
List list = new ArrayList<>();
HashSet h = new HashSet(source);//用来去除数据库中重复值
HashSet p = new HashSet();//用来去excel中重复数据
DuplicateRemoval duplicateRemoval = new DuplicateRemoval();
int countOk = 0;
int countError = 0;
List<ErrorRow> errorRows = new ArrayList<>();
for (int i = 0 ; i < newDate.size() ; i++) {
if(p.add(newDate.get(i))){//excel未重复
if(h.add(newDate.get(i))){//数据库中未重复
list.add(newDate.get(i));
countOk++;
}else{//数据库中重复
ErrorRow errorRow = new ErrorRow();
errorRow.setErrorRow(i);
errorRow.setErrorType("数据库中已存在此条数据!");
countError++;
errorRows.add(errorRow);
}
}else{//excel重复
ErrorRow errorRow = new ErrorRow();
errorRow.setErrorRow(i);
errorRow.setErrorType("Excel中此条数据重复!");
countError++;
errorRows.add(errorRow);
}
}
duplicateRemoval.setCountOk(countOk);
duplicateRemoval.setCountError(countError);
duplicateRemoval.setErrorRows(errorRows);
duplicateRemoval.setList(list);
return duplicateRemoval;
}