检查数组列表是否包含给定对象

2022-09-01 17:22:38

假设我有这样的类:

class A {
  int elementA;
  int elementB
}

我也有一个这样的:.ArrayListArrayList<A> listObj

如何检查该列表是否包含仅使用 的某些属性的对象?例如,只考虑查找对象是否已经在列表中?AelementAnewA{elementA}

对于对象,我已经定义了一个方法,其中我只考虑,但这还不够。AequalselementA


答案 1

List#contains() 方法使用该方法来评估两个对象是否相同。因此,您需要在类中重写,并且还要重写 .equals()equals()AhashCode()

@Override
public boolean equals(Object object)
{
    boolean isEqual= false;

    if (object != null && object instanceof A)
    {
        isEqual = (this.elementA == ((A) object).elementA);
    }

    return isEqual;
}

@Override
public int hashCode() {
    return this.elementA;
}

答案 2

您可以调整您的需求,但您也可以使用已经存在的强大馆藏库之一,例如commons-collectionsGuavalambdaj。它们都具有迭代和谓词构造,允许您根据某些谓词“浏览”集合。equals

共享资源集合示例:

boolean contains = CollectionUtils.exists(myArrayList, new Predicate<A>() {
    public boolean evaluate(A theA) {
        // Do the comparison
    }
});