retainAll for many lists(Java)

时间:2011-06-07 09:46:58

标签: java intersection

我有一堆列表(List<SomeClass>),我想得到交集。 SomeClass看起来像这样:

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

  // getters and setters
}

如果成员a和b相等,它应该只成为交集的一部分。我怎么能这样做?

我可能会以某种方式使用Collection.retainAll(...)。但我有大量的List对象要比较......

1 个答案:

答案 0 :(得分:2)

为您的班级相应地覆盖equalshasCode方法。见Implementing equals。这两个方法隐式驻留在Object实例,所有类的根,并且可以调整/覆盖它们以实现某些语义之后的实例标识,就像您的情况一样。

other SO question也解决了此问题,您可以找到实施equalshasCode方法的示例。

至于如何重新获得N个列表中的所有元素。您可以使用第一个列表初始化HashSet并迭代其余的调用retainAll