retainAll для многих списков (Java) - PullRequest
2 голосов
/ 07 июня 2011

У меня есть несколько списков (List<SomeClass>), и я хочу получить пересечение.SomeClass выглядит следующим образом:

public class SomeClass {
  private String a;
  private String b;

  // getters and setters
}

Он должен стать частью пересечения, только если члены a и b равны.Как я могу это сделать?

Я мог бы, вероятно, использовать Collection.retainAll(...) как-то.Но у меня есть большое количество объектов List для сравнения ...

1 Ответ

2 голосов
/ 07 июня 2011

Переопределите методы equals и hasCode соответственно для вашего класса.См. Реализация равна .Эти два метода неявно находятся в экземпляре Object, корне всех классов, и их можно настраивать / переопределять для реализации идентификации экземпляров, следуя определенной семантике, как в вашем случае.

Это другой SOвопрос также решает эту проблему, и вы можете найти примеры, которые реализуют методы equals и hasCode.

Что касается того, как восстановить все элементы в N списках.Вы можете просто инициализировать HashSet с первым списком и перебирать остальные, вызывая retainAll.

...