问题陈述
我有两个要比较的相同类型对象的集合。在这种情况下,我想根据不考虑equals()
对象的属性来比较它们。在我的示例中,我使用了 Names 的排名集合,例如:
public class Name {
private String name;
private int weightedRank;
//getters & setters
@Override
public boolean equals(Object obj) {
return this.name.equals(obj.name); //Naive implementation just to show
//equals is based on the name field.
}
}
我想比较两个集合以断言,对于i
每个集合中的位置,weightedRank
该位置的每个名称的值是相同的。我做了一些谷歌搜索,但没有在 Commons Collections 或任何其他 API 中找到合适的方法,所以我想出了以下内容:
public <T> boolean comparatorEquals(Collection<T> col1, Collection<T> col2,
Comparator<T> c)
{
if (col1 == null)
return col2 == null;
if (col2 == null)
return false;
if (col1.size() != col2.size())
return false;
Iterator<T> i1 = col1.iterator(), i2 = col2.iterator();
while(i1.hasNext() && i2.hasNext()) {
if (c.compare(i1.next(), i2.next()) != 0) {
return false;
}
}
return true;
}
问题
还有另一种方法可以做到这一点吗?我是否错过了 Commons Collections 中的一个明显方法?
有关的
我也在 SO 上发现了这个问题,虽然在这种情况下我认为覆盖equals()
更有意义。
编辑
与此非常相似的内容将在不久的将来(在撰写本文时)发布Apache Commons Collections 。请参阅https://issues.apache.org/jira/browse/COLLECTIONS-446。