List.equals имеет значение false, несмотря на то, что все объекты в списке равны - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть список объектов, скажем, Article, который является довольно сложным, вложенным объектом. Я опущу реальный класс, так как он не должен иметь значения; вероятно, важно знать, что Article имеет equals() реализовано (с AutoValue).

У меня есть два списка:

List<Article> list1 = getSomeArticles(); 
List<Article> list2 = getOtherArticles();

Теперь я проверяю, равны ли они:

boolean listsAreEqual = list1.equals(list2); 

это возвращает false. Но я проверяю, если. оба списка имеют одинаковый размер и б. каждый элемент с индексом i в обоих списках равен:

if (list1.size() != list2.size()) {
  return; 
}

for (int i = 0; i < list1.size(); i++) {
  Article article1 = list1.get(i);
  Article article2 = list2.get(i); 

  if (!article1.equals(article2)) {
    return; 
  }
}

// All items in the two lists are equals, but list2.equals(list2) is false

Кажется, что оба списка содержат одинаковые элементы, но list1.equals (list2) возвращает false.

Как это может быть?

1 Ответ

0 голосов
/ 15 ноября 2018

Они должны быть равны. Что-то не так с вашим кодом. Из документации :

Сравнивает указанный объект с этим списком на равенство. Возвращает true, если и только если указанный объект также является списком, оба списка имеют одинаковый размер, и все соответствующие пары элементов в двух списки равны. (Два элемента e1 и e2 равны, если (e1 == null? e2 == null: e1.equals (e2)).) Другими словами, два списка определены для быть равными, если они содержат одинаковые элементы в одинаковом порядке. это определение гарантирует, что метод equals работает должным образом через различные реализации интерфейса List.

Если, конечно, реализация List не переопределяет значение по умолчанию из java.util.List.

...