我有一个Set
:
final Set<Object> partialResults = new LinkedHashSet<Object>();
设置如下值:
partialResults.add(createResultList(data.getProduct(), data.getMaterialId()));
private List<Object> createResultList(final ProductModel product, final String code)
{
final List<Object> result = new ArrayList<Object>();
result.add(product);
result.add(code);
return result;
}
正在添加重复的产品;如何避免添加重复记录?
答案 0 :(得分:2)
您的Set
包含ArrayList
个实例,每个实例包含一个ProductModel
实例和一个String
实例。为了使LinkedHashSet
认为两个元素相等,它们必须具有相同的hashCode
,并且equals
方法在应用于它们时应返回true。
对于ArrayList
,hashCode
和equals
取决于hashCode
元素的equals
和ArrayList
。 String
会正确覆盖hashCode
和equals
,这意味着您可能无法正确覆盖hashCode
的{{1}}和equals
。
答案 1 :(得分:1)
要么做Eran建议,要么(看看手头的用例)改变你的逻辑使用HashMap
而不是Set
使用code
字符串作为键和{ {1}}对象作为值。通过这种方式,您可以使用map.values()获得ProductModel
的唯一集合,并避免在ProductModels
中覆盖hashCode
和equals
的麻烦。