如何测试某个对象是否在列表中

时间:2016-01-05 18:17:20

标签: java

我将POJO添加到链表中,现在我想检查列表是否包含该对象。以下代码不起作用,有什么建议吗?

List<Object> data = new LinkedList<Object>();

FooBar obj = new FooBar();

data.add(obj);

if (data.contains(FooBar.class)) {
    // true
}

3 个答案:

答案 0 :(得分:1)

你试过吗

if (data.contains(obj)) {
    // true
}

对于列表中的任何元素,如果true为真,则列表的方法contains()将仅返回element.equals(parameter)

编辑:如果您尝试测试的是列表中有FooBar的任何实例,并且您使用的是Java 8,则可以执行以下操作:

if (strs.stream().anyMatch(e -> e instanceof FooBar)) {
    // true
}

答案 1 :(得分:0)

首先,您需要执行data.contains(obj),即传递实际对象进行比较。

ArrayList implements列表接口。如果您使用contains方法查看Javadoc for List,您会看到它使用equals()方法来评估两个对象是否相同。

因此,为了使这项工作,您需要覆盖equals方法,如:

@Override
public boolean equals(Object obj) {
 ..
}

答案 2 :(得分:0)

您必须覆盖POJO对象中的equals方法。

如果您只是包含它将始终返回false,因为该对象永远不会相等。所以你必须覆盖POJO对象。

您可以查看有关如何覆盖equals方法的此问题: How to override equals method in java

更多信息: http://crunchify.com/how-to-override-equals-and-hashcode-method-in-java/