【问题标题】:how to compare two variables of a object in arraylist in java [duplicate]java - 如何比较java中arraylist中对象的两个变量[重复]
【发布时间】:2016-11-16 06:25:18
【问题描述】:

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

【问题讨论】:

  • 你能有一个代码sn-p或代码示例吗?
  • 覆盖 equals() & hahscode() 并使用 list1.removeAll(list2)
  • 实现equals(),如果两个对象具有相同的品牌和类型,则声明它们相等(不要查看日期)。因此,hashCode() 也不应该查看日期。

标签: java arraylist collections duplicates


【解决方案1】:

根据你的变量覆盖添加类的equals()hashCode(),然后使用LinkedHashSet代替ArrayList,你所有的工作都会自动完成。

【讨论】:

    【解决方案2】:

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

    这是一个示例代码 sn-p,它使用流来执行此操作:

        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() 流过滤器,最后解包每个结果。

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多