问题陈述
我有两个要比较的相同类型对象的集合。在这种情况下,我想根据不考虑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。