我将POJO添加到链表中,现在我想检查列表是否包含该对象。以下代码不起作用,有什么建议吗?
List<Object> data = new LinkedList<Object>();
FooBar obj = new FooBar();
data.add(obj);
if (data.contains(FooBar.class)) {
// true
}
答案 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/