Nim*_*sky 4 java collections guava
出于企业原因,我无法覆盖hashCode,我必须使用Java 6(但我可以使用番石榴)
什么是最佳/最简单/最快/最有效/ [插入相当于最佳的不确定形容词]机制从Java集合中删除重复的bean?
副本由返回相同值的getter子集定义,例如
pojoA.getVal() == pojoB.getVal() && pojoA.getOtherVal() == pojoB.getOtherVal()
Run Code Online (Sandbox Code Playgroud)
das*_*ght 10
将感兴趣的对象包装到您自己的类中,并覆盖它hashCode/ equals以关注特定的属性子集.创建一个包装器的哈希集,然后从集合中获取对象以获得无重复的子集.
这是一个例子:
class ActualData {
public String getAttr1();
public String getAttr2();
public String getAttr3();
public String getAttr4();
}
Run Code Online (Sandbox Code Playgroud)
假设您要关注属性1,2和4.然后您可以创建一个这样的包装器:
class Wrapper {
private final ActualData data;
public ActualData getData() {
return data;
}
private final int hash;
public Wrapper(ActualData data) {
this.data = data;
this.has = ... // Compute hash based on data's attr1, 2, and 4
}
@Override
public int hashCode() {
return hashCode;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Wrapper)) return false;
Wrapper other = (Wrapper)obj;
return data.getAttr1().equals(other.getAttr1())
&& data.getAttr2().equals(other.getAttr2())
&& data.getAttr4().equals(other.getAttr4());
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以做一个HashSet<Wrapper>:
Set<Wrapper> set = new HashSet<>();
for (ActualData item : listWithDuplicates) {
if (!set.add(new Wrapper(item))) {
System.out.println("Item "+item+" was a duplicate");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |