【发布时间】:2011-09-07 22:50:59
【问题描述】:
我必须在这里遗漏一些东西......我有以下代码和输出。你能明白为什么Category categoryToBeDeleted 没有从result 中每本书的类别集中删除吗?
谢谢!!
代码:
List<Book> result = ... //get list from database
final Category categoryToBeDeleted = ... //get category from database
System.out.println("categoryToBeDeleted id: " + categoryToBeDeleted.getId() + " name: " + categoryToBeDeleted.getName());
for (Book book : result) {
System.out.println("before remove :");
for (Category category : book.getCategories()) {
System.out.println("category id: " + category.getId() + " name: " + category.getName() + " equals: " + category.equals(categoryToBeDeleted));
}
System.out.println("-----------------------");
book.getCategories().remove(categoryToBeDeleted);
System.out.println("after remove :");
for (Category category : book.getCategories()) {
System.out.println("category id: " + category.getId() + " name: " + category.getName() + " equals: " + category.equals(categoryToBeDeleted));
}
System.out.println("-----------------------");
}
输出:
categoryToBeDeleted id: 10 name: cosmetics
before remove :
category id: 10 name: cosmetics equals: true
category id: 1 name: cleaning equals: false
-----------------------
after remove :
category id: 10 name: cosmetics equals: true
category id: 1 name: cleaning equals: false
-----------------------
before remove :
category id: 9 name: junk-2 equals: false
category id: 10 name: cosmetics equals: true
-----------------------
after remove :
category id: 9 name: junk-2 equals: false
category id: 10 name: cosmetics equals: true
-----------------------
before remove :
category id: 6 name: knick-knacks equals: false
category id: 4 name: baby equals: false
category id: 9 name: junk-2 equals: false
category id: 10 name: cosmetics equals: true
-----------------------
after remove :
category id: 6 name: knick-knacks equals: false
category id: 4 name: baby equals: false
category id: 9 name: junk-2 equals: false
category id: 10 name: cosmetics equals: true
-----------------------
附:类别包含:
@Override
public boolean equals(Object obj) {
if (obj instanceof Category) {
Category thatCategory = (Category) obj;
return this.id.equals(thatCategory.id);
}
return false;
}
Javadoc
布尔删除(对象o)
如果存在,则从该集合中删除指定元素(可选操作)。更正式地说,如果这个集合包含这样一个元素,则删除一个元素 e 使得 (o==null ? e==null : o.equals(e))。如果此 set 包含该元素(或等效地,如果此 set 由于调用而更改),则返回 true。 (一旦调用返回,此集合将不包含该元素。)
【问题讨论】:
标签: java collections