1
我正在执行for-loop
内的逻辑,它将从狗窝对象中删除状态为“ACCEPTED”的任何狗对象。删除arrayList中的项目:试图从不存在的索引中删除?
请注意,一个狗窝可以有一个列表许多狗。
循环:
allDogsInKennel = kennel.getDogsList();
for (int i = 0; i < allDogsInKennel.size(); i++) {
//delete any dog object with a status of Accepted
if (allDogsInKennel.get(i).getStatus() == "ACCEPTED") {
kennel.removeDog(allDogsInKennel.get(i));
}
}
removeDog方法
public void removeDog(Dog d) {
this.dogList.remove(d);
}
我的问题是例如全部6
名单中的狗应该删除,但目前只有3
正在被删除。
例子:
original size of list = 6 items
Item removed from index 0 = 5 items
Item removed from index 1 = 4 items
item removed from index 2 = 3 items
现在下一次迭代循环试图删除index 3
由于i++
条件,但阵列只会去index 2
,因为它现在已经在只索引3
项目:
0, 1, 2
如何更改上面的逻辑以确保所有项都从阵列中删除?
这似乎工作,这是一个合适的解决方案或只是一个解决方法? – java123999
例如,如果列表中有5个对象,并且您删除了第3个对象。现在索引改变了,并且以前的第4个对象的索引现在是2(列表中的第3个对象)。所以我认为这是一个合适的解决方案。有关详细信息,我将编辑答案并尝试提供更多示例 –
正确的解决方案是首先不要使用ArrayList和循环修改。在你的情况下,你可以复制剩余的狗到一个新的列表。 'n = ArrayList(dogList.size());对于{(d:dogList)if!d.getStatus()。equals(“ACCEPTED”)n.add(d); } dogList = n;'。这与溪流变得更清洁。 – eckes