![](/img/trans.png)
[英]Simple ArrayList.remove(int) doesn't work. What I am doing wrong?
[英]ArrayList.remove(i) doesn't delete all objects as it should
我有一個簡單的listview(recyclerView),其中每個list-item都有一個復選框。 應使用以下代碼刪除所有選中的項目:
for(int i = 0; i<shopListItems.size(); i++) {
if(shopListItems.get(i).isBought == 1) {
shopListItems.remove(i);
}
}
但由於某種原因,它沒有。 如果選中了10個項目,則只會刪除其中的7個項目,我必須再次運行該代碼以刪除其余項目。
代碼看起來很好,但我真的不明白它為什么不刪除所有已檢查的或所有的(isBought == 1)
。
remove(index)不僅會刪除對象,還會移動所有剩余的對象以縮小間隙。 您需要從列表末尾迭代到開始
for(int i = shopListItems.size() - 1 ; i >= 0 ; i--) {
if(shopListItems.get(i).isBought == 1){
shopListItems.remove(i);
}
}
除了上面提到的方法,您還可以按升序執行:
for(int i = 0; i < list.size(); i++){
if(list.get(i).isBought == 1){
list.remove(i--);
}
}
如果您使用的是Java 8,還有另一種簡單的替代方法:
list = list.stream()
.filter(item -> item.isBought == 1)
.collect(Collectors.toList());
參考:http: //zeroturnaround.com/rebellabs/java-8-explained-applying-lambdas-to-java-collections/
扭轉你的循環!
for(int i = shopListItems.size() -1; i >=0 i--){
if(shopListItems.get(i).isBought == 1){
shopListItems.remove(i);
}
}
如果您不打算刪除整個ArrayList,則不必擔心,因為隨着大小的改變,它不會影響其余的測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.