我有一个变量品牌,类型和日期的pojo,我用这个pojo创建了一个Arraylist。这个arraylist有重复,现在我想通过比较该对象的品牌和类型从arraylist中删除重复。如果品牌和类型已经存在,我需要从arraylist中删除该对象。
答案 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()
流过滤器,最后打开每个结果。