我有一个方法,当输入该InventoryItem的部分描述时,该方法应该删除数组列表(iList)中的InventoryItem(i)。该方法必须返回已删除的项目,并且我不确定如何执行此操作。到目前为止,这是我的代码。
public InventoryItem deleteInventoryItem(String descriptionIn) {
int index = -1;
boolean result = false;
for (InventoryItem i : iList) {
if (i.getDescription().toLowerCase().startsWith(descriptionIn.toLowerCase())) {
index = (iList.indexOf(i));
result = true;
}
if (index >= 0) {
iList.remove(index);
}
}
return null;
}
答案 0 :(得分:4)
我不能使用迭代器。 [...]我需要为每个循环使用a
这是一种方式:
public InventoryItem deleteInventoryItem(String descriptionIn) {
for (InventoryItem item : iList)
if (item.getDescription()
.toLowerCase()
.startsWith(descriptionIn.toLowerCase())) {
iList.remove(item);
return item;
}
}
return null;
}
请注意,这会从列表中删除最多一个对象。如果有多个匹配项,则只会删除第一个匹配项。
如果我只是想找到并返回一个对象而不是删除它,[...]
然后您只需跳过iList.remove(item)
行。
但更好的方法是将方法拆分如下:
public InventoryItem findInventoryItem(String descriptionIn) {
for (InventoryItem item : iList)
if (item.getDescription()
.toLowerCase()
.startsWith(descriptionIn.toLowerCase())) {
return item;
}
}
return null;
}
public InventoryItem deleteInventoryItem(String description) {
InventoryItem item = findInventoryItem(description);
if (item != null)
iList.remove(item);
return item;
}
答案 1 :(得分:2)
您需要在删除对象之前存储该对象。然后返回该对象。
public InventoryItem deleteInventoryItem(String descriptionIn) {
int index = -1;
boolean result = false;
for (InventoryItem i : iList) {
if (i.getDescription().toLowerCase().startsWith(descriptionIn.toLowerCase())) {
index = (iList.indexOf(i));
result = true;
}
if (index >= 0) {
return iList.remove(index);
}
}
return null;
}
请注意,如果此返回null表示没有删除任何内容。
编辑
如果您只想返回对象而不删除它。
将return iList.remove(index);
替换为return iList.get(index);
答案 2 :(得分:0)
我认为您只需要在return
方法前面加remove
个关键字。但是考虑到你把它搞砸了会导致ConcurrentModificationException,我改了一下。
public InventoryItem deleteInventoryItem(String descriptionIn) {
Iterator<InventoryItem> iterator = iList.iterator();
while(iterator.hasNext())
{
InventoryItem i = iterator.next();
if (i.getDescription().toLowerCase().startsWith(descriptionIn.toLowerCase())) {
iterator.remove();
return i;
}
}
return null;
}
答案 3 :(得分:0)
您只是将其从列表中删除,而不是从内存中删除该对象。您已经有了对它的引用,因此您可以在从列表中删除后返回它。
for (InventoryItem i : iList) {
if (i.getDescription().toLowerCase().startsWith(descriptionIn.toLowerCase())) {
iList.remove(i);
return i;
}
}
答案 4 :(得分:0)
像这样的东西。我只是编辑它以避免ConcurrentModificationException并且还将index的声明移动到for循环中。
public InventoryItem deleteInventoryItem(String descriptionIn) {
InventoryItem returnItem = null;
InventoryItem i = null;
for (int j = 0; j < iList.size(); j++) {
boolean result = false;
i = iList.get(j);
if (i.getDescription().toLowerCase().startsWith(descriptionIn.toLowerCase())) {
returnItem = i;
iList.remove(j);
j--;
}
}
return returnItem;
}