我檢查,如果ArrayList包含的對象:Java。 ArrayList中的contains方法不工作
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;
}
可以顯示一個例子,請 –
檢查這個例子http://javapapers.com/core-java/hashcode-and-equals-methods-override/ –