2016-11-16 118 views
0

我有一个变量品牌,类型和日期pojo,我创建了一个使用这个pojo的Arraylist。这ArrayList是重复的,现在我想通过仅比较该对象的品牌和类型来删除arraylist中的重复。如果品牌和类型已经存在,我需要从arraylist中删除该对象。如何比较java中arraylist对象的两个变量

+0

你可以有一个代码片段或代码示例? – msagala25

+0

覆盖equals()&hahscode()并使用list1.removeAll(list2) – developer

+0

如果具有相同的品牌和类型(不看日期),执行'equals()'声明两个对象相等。结果,'hashCode()'也不应该看日期。 –

回答

0

覆盖equals()& hahscode(根据您的变量添加类),然后使用LinkedHashSet,而不是ArrayList的和所有的工作都将自动完成。

+0

它的工作表示感谢 –

0

如果您无法或不愿意更改POJO的equals()方法,则必须使用Map来为每个不同的品牌+类型对收集一个样本。

下面是一个例子代码段此使用流,其作用:

list = new ArrayList(list.stream().unordered() 
      .collect(Collectors.toMap(
        pojo -> new Pair<>(pojo.brand, pojo.type), 
        pojo -> pojo, 
        (original, duplicate) -> original)).values()); 

或者,也可以包装在一个包装对象定义仅基于品牌和类型equals每个POJO,然后用简单的distinct()流过滤器,最后解开每个结果。