我有一堆列表(List<SomeClass>
),我想得到交集。 SomeClass看起来像这样:
public class SomeClass {
private String a;
private String b;
// getters and setters
}
如果成员a和b相等,它应该只成为交集的一部分。我怎么能这样做?
我可能会以某种方式使用Collection.retainAll(...)
。但我有大量的List对象要比较......
答案 0 :(得分:2)
为您的班级相应地覆盖equals
和hasCode
方法。见Implementing equals。这两个方法隐式驻留在Object
实例,所有类的根,并且可以调整/覆盖它们以实现某些语义之后的实例标识,就像您的情况一样。
此other SO question也解决了此问题,您可以找到实施equals
和hasCode
方法的示例。
至于如何重新获得N个列表中的所有元素。您可以使用第一个列表初始化HashSet
并迭代其余的调用retainAll
。