我正在检查ArrayList是否包含object:
List<Property> propertiesByName = getPropertiesByCategory(propertyCategory);
for(Property property: propertiesByName){
List<Property> propertyList = getVariationItem().getProperties();
Galgo.log("*******************");
Galgo.log(propertyList.toString());
Galgo.log(property.toString());
Galgo.log("contains:"+propertyList.contains(property));
}
我正在关注日志:
*******************
[Property{name='color', value='red'}, Property{name='size', value='42'}]
Property{name='color', value='red'}
contains:false
*******************
[Property{name='color', value='red'}, Property{name='size', value='42'}]
Property{name='color', value='blue'}
contains:false
Database: get 2 variations
*******************
[Property{name='color', value='red'}, Property{name='size', value='42'}]
Property{name='size', value='42'}
contains:false
*******************
[Property{name='color', value='red'}, Property{name='size', value='42'}]
Property{name='size', value='34'}
contains:false
正如您在第一和第三种情况中所看到的,它应该返回true。有什么问题?
我的代码的其他部分。第一种按类别(颜色,大小)获取属性的方法。第二种方法是获取所有可用的属性:
private List<Property> getPropertiesByCategory(String category){
List<Property> properties = new ArrayList<>();
for(Property property: getAllProperties()){
if(property.getName().equals(category)){
if(!properties.contains(property)){
properties.add(property);
}
}
}
return properties;
}
private List<Property> getAllProperties() {
List<Property> propertyList = new ArrayList<>();
for(VariationItem variationItem: getProductItem().getVariationsList()){
for(Property property: variationItem.getProperties()){
if(!propertyList.contains(property))
{
propertyList.add(property);
}
}
}
return propertyList;
}
答案 0 :(得分:2)
要使用class Session
{
public:Session() {}
};
class Requestor
{
public: Requestor(const Session& session) {};
};
class Client
{
public:Client()
{
Session newSession;
requestor = Requestor(newSession);
}
private:
Session session;
Requestor requestor;
};
方法,您必须覆盖contains
和equals()
方法才能实现此目的。您可以查看此答案以了解实施https://stackoverflow.com/a/16069158/1320616。实际上hashCode()
会比较两个对象。并且要比较两个对象,您必须实现contains()
方法。
编辑:以下是完整的详细信息
所以当你使用contains()时它正在做什么
equals()
如果你没有在你的类中实现equals()方法,它将采用Object类中的@Override public boolean contains(Object object) {
Object[] a = array;
int s = size;
if (object != null) {
for (int i = 0; i < s; i++) {
if (object.equals(a[i])) {
return true;
}
}
} else {
for (int i = 0; i < s; i++) {
if (a[i] == null) {
return true;
}
}
}
return false;
}
方法
equals()
所以现在它减少到==正在两个对象之间使用来比较它们。当你在两个对象之间放置==时,它会根据两个东西进行比较(a)两个对象的哈希码(b)它使用两个对象的public boolean equals(Object o) {
return this == o;
}
。
每个对象都分配有不同的哈希码。这就是为什么toString()
没有给出正确结果的原因。
答案 1 :(得分:0)
您可以像这样检查字符串:
-o