import java.util.Objects;
/**
* 重写User对象的equals和hashCode方法
**/
public class User {
private String id;//用户Id
private String name;//用户名称
//... getter setter Constructor
//重写equals方法表示 id 和 name 相同的对象就判定为相同对象
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id) &&
Objects.equals(name, user.name);
}
//重写hashCode详见Objects.hash()方法
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}
// 最终调用 Arrays.hashCode 方法
public static int hashCode(Object a[]) {
if (a == null)
return 0;
int result = 1;
//hashCode核心计算
//前一对象hashCode*31 + 后一对象hashCode, 并依次累加
//注意: 乘积系数31为系统选定的较优系数, 参见String的hashCode方法, 下面也有详细介绍
for (Object element : a)
result = 31 * result + (element == null ? 0 : element.hashCode());
return result;
}
//对用户进行去重, 简单方便
public Set<User> getUserSet(List<User> userList){
Set<User> userSet = new HashSet<>();
userList.stream().forEach(u -> userSet.add(u));
return userSet;
}