【发布时间】:2017-10-17 17:20:11
【问题描述】:
我有课
public class A{
private String x;
private String y;
private String z;
}
我有多个列表List<List<A>>,需要在所有列表中找到共同的条目。如果一个对象的 x == 另一个对象的 x,则条目相同。
如果我正在检查对象的相等性,我可以将列表转换为集合并使用retainAll()。但是当 y 和 z 可能不同时,我该怎么做呢? x 必须相同。
【问题讨论】:
-
不确定我是否正确,但似乎您只需要为您的 A 类覆盖 equals 和哈希码,因此仅当 this.x == x 时它才返回 true
-
构造一个
Map<String, List<A>>。遍历列表列表中的所有As,并将每个添加到与A的成员x关联的Map值。完成后,您的地图将为所有A中的每个不同的x提供一个条目,并且该条目的值将包含所有A与x的列表. -
如果你真的想根据对象标识 (
==) 而不是相等 (equals()) 进行匹配,那么选择IdentityHashMap作为地图实现。 -
您期望的输出是什么? List 是否具有对象 A.x 相同的值?