Java 如何避免集合中的重复<;对象>;
我有一套:Java 如何避免集合中的重复<;对象>;,java,set,Java,Set,我有一套: final Set<Object> partialResults = new LinkedHashSet<Object>(); final Set partialResults=new LinkedHashSet(); 设置如下值: partialResults.add(createResultList(data.getProduct(), data.getMaterialId())); private List<Object> create
final Set<Object> partialResults = new LinkedHashSet<Object>();
final Set partialResults=new LinkedHashSet();
设置如下值:
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;
}
partialResults.add(createResultList(data.getProduct(),data.getMaterialId());
私有列表createResultList(最终产品模型产品,最终字符串代码)
{
最终列表结果=新建ArrayList();
结果:添加(产品);
结果.添加(代码);
返回结果;
}
增加重复产品,;如何避免添加重复记录?您的
集合
包含数组列表
实例,每个实例都包含一个ProductModel
实例和一个字符串
实例。为了让LinkedHashSet
认为两个元素相等,它们必须具有相同的hashCode
,并且equals
方法在应用于这两个元素时应返回true
对于
ArrayList
,hashCode
和equals
取决于ArrayList
元素的hashCode
和equals
String
正确覆盖hashCode
和equals
,这意味着您可能没有正确覆盖ProductModel
的hashCode
和equals
。按照Eran的建议或(查看手头的用例)将逻辑更改为使用HashMap
而不是Set
,使用code
字符串作为键,使用ProductModel
对象作为值。这样,您就可以使用map.values()获得一组独特的ProductModels
并且省去了在ProductModel
中覆盖hashCode
和equals
的麻烦。我无法在ProductModel cz中覆盖它,因为它是从xml文件中自动生成的类,以任何其他方式从partialResults中删除重复记录。因此,代码不是ProductModel的唯一id-不同的ProductModels可以使用相同的代码?