【问题标题】:containsAll return False when comparing two ArrayList of object [duplicate]containsAll 在比较对象的两个 ArrayList 时返回 False [重复]
【发布时间】:2017-09-05 22:44:43
【问题描述】:

我有两个 ArrayList 作为:

ArrayOne

ClassPojo [Name ="XXX", FilterID = 4]
ClassPojo [Name = "ZZZ", FilterID = 5]

数组二

ClassPojo [Name = "XXX", FilterID = 4]

但是当尝试使用时:

 Arrays.asList(ArrayOne).contains(ArrayTwo )

ArrayOne().containsAll(ArrayTwo)

它返回假, 我知道比较是基于参考而不是价值平等 但我怎么能通过价值观做到这一点 请注意:我想使用 conatinsAll ,因此如果在 ArrayOne 的某些部分找到 arrayTwo 的内容,则返回 true 。

【问题讨论】:

标签: java arraylist


【解决方案1】:

我知道比较是基于引用而不是值相等

不,它基于价值平等。您需要覆盖 equals() 以正确比较您的 ClassPojo 的 2 个对象

【讨论】:

  • 那为什么它返回 false 呢?
  • 它使用equals()Object 继承。上面写着false
  • 那么为什么它返回 false ,有两个相同的值与 filterID=4
  • 在您的 IDE 中调试。在java.lang.Object#equals()中放一个断点
  • 我不使用 equals() ,我使用的是 ArrayOne().containsAll(ArrayTwo) ,我已经对其进行了测试,它返回 false
【解决方案2】:

为了使containscontainsall 工作,您需要覆盖您的类ClassPojo 中的equals() 函数。

它可能看起来像这样:

@Override
public boolean equals(Object obj){
    if (obj.Name.equals(this.Name) && obj.FilterID == this.FilterID)
        return true;
    else
        return false;
}

(用手机写的,小心复制粘贴)

【讨论】:

  • 方法不会覆盖其超类中的方法
  • cannot reslove method equals (equals(this.FilterID)) for int
  • 检查,确实,更新的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 2019-05-10
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多