今天写一个过滤list中重复object的逻辑,一开始考虑使用ArrayList中contains方法循环过滤,但是发现并不适用。随后想到利用HashSet存储数据不重复的这一特性,可解决问题。使用HashSet的add方法时会去调用对象类的equals()和hashcode()判断是否有重复的值。因此需要在实体类中重写equals()和hashcode(),代码如下:
entity类:
//这两个方法是可以使用开发工具自动生成的
//生成的时候可根据需要选择判断字段
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ECUModelInfo)) return false;
ECUModelInfo that = (ECUModelInfo) o;
if (ecuId != null ? !ecuId.equals(that.ecuId) : that.ecuId != null) return false;
return modelId != null ? modelId.equals(that.modelId) : that.modelId == null;
}
@Override
public int hashCode() {
int result = ecuId != null ? ecuId.hashCode() : 0;
result = 31 * result + (modelId != null ? modelId.hashCode() : 0);
return result;
}
impl类:
List<ECUModelInfo> modelInfos;
Set<ECUModelInfo> ECUModelSet = new HashSet<>();
//for循环结束后,ECUModelSet 中将是过滤后数据集合
for (ECUModelInfo modelInfo : modelInfos){
ECUModelSet.add(modelInfo);
}
for (ECUModelInfo ecuModelInfo : ECUModelSet) {
//对过滤后的集合中的数据取出,可进行其他操作
}
有描述不准确或者不正确的地方,欢迎指出,但求别黑。