如何在java中比较arraylist中对象的两个变量

时间:2016-11-16 06:25:18

标签: java arraylist collections duplicates

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

以下是使用流执行此操作的示例代码段:

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

或者,您可以将每个POJO包装在一个包装器对象中,该对象仅根据品牌和类型定义equals,然后使用更简单的distinct()流过滤器,最后打开每个结果。