原理:利用HashMap<Key,Value>,put\get方法底层(hash碰撞),故需重写对象的equals(),hashCode()方法!
集合中实例
package io.unify.cva.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Objects;
/**
*
*
* @author chenjunhua [email protected]
* @since 1.0.0 2019-06-10
*/
@TableName("cva_contact_info")
public class CvaContactInfoEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId
private Long id;
/**
* 电话号码
*/
private String telephoneNumber;
/**
* 姓名
*/
private String name;
/**
* 通付盾设备(Imei)号
*/
private String imeiCode;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public void setTelephoneNumber(String telephoneNumber) {
this.telephoneNumber = telephoneNumber;
}
public String getTelephoneNumber() {
return telephoneNumber;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setImeiCode(String imeiCode) {
this.imeiCode = imeiCode;
}
public String getImeiCode() {
return imeiCode;
}
@Override
public boolean equals(Object obj) {
if(obj == this) {return true;}
if (!(obj instanceof CvaContactInfoEntity)) { return false;}
CvaContactInfoEntity re = (CvaContactInfoEntity) obj;
return telephoneNumber.equals(re.getTelephoneNumber())&&
name.equals(re.getName())&&
imeiCode.equals(re.getImeiCode());
}
@Override
public int hashCode() {
return Objects.hash(telephoneNumber, name, imeiCode);
}
}
工具类:
/**
* @description: 比较两个list,取出存在newList中,但不存在dbList中的数据,差异数据放入differentList
* @param newList
* @param dbList
* @return List
* @throws
* @author chenjunhua
* @date 2019/6/12 15:25
*/
public static <T> List<T> getDifferentList(List<T> newList, List<T> dbList) {
Map<T,Integer> map = new HashMap<T,Integer>(dbList.size());
List<T> differentList = new ArrayList<T>();
for(T resource : dbList){
map.put(resource,1);
}
for(T resource1 : newList){
if(map.get(resource1)==null){
differentList.add(resource1);
}
}
return differentList;
}