Сравните две коллекции Java, используя Comparator вместо equals ()
У меня есть две коллекции одного типа объектов, которые я хочу сравнить. В этом случае я хочу сравнить их на основе атрибута, который не учитываетequals()
для объектов. В моем примере яm используя ранжированные коллекции Имен, например:
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
каждого имени в этой позиции одинаковое значение. Я немного погуглил, но неt найти подходящий метод в Commons Collections или любом другом API, поэтому я придумал следующее:
public boolean comparatorEquals(Collection col1, Collection col2,
Comparator c)
{
if (col1 == null)
return col2 == null;
if (col2 == null)
return false;
if (col1.size() != col2.size())
return false;
Iterator i1 = col1.iterator(), i2 = col2.iterator();
while(i1.hasNext() && i2.hasNext()) {
if (c.compare(i1.next(), i2.next()) != 0) {
return false;
}
}
return true;
}
ВопросЕсть ли другой способ сделать это? Я пропустил очевидный метод из коллекций Commons?
связанные сЯ тоже заметилаэтот вопрос на SO, который похож, хотя в этом случае яЯ думаю, что наиважнейшийequals()
имеет немного больше смысла.
Нечто похожее на это войдет в релизКоллекции Apache Commons в ближайшее время (на момент написания статьи). Увидетьhttps://issues.apache.org/jira/browse/COLLECTIONS-446.