簡體   English   中英

ArrayList.remove(i)不會刪除所有對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM