刪除List集合中的元素方法


List集合是我們平時使用的最多的集合了,一般用來存放從數據庫中查詢的對象數據,但有時我們會從中篩選不需要的數據,第一次使用這種方式:

使用增強for循環遍歷,使用list的remove方法刪除不符合的對象。

        Page<EsAttention> attentionInfos = esAttentionMapper.getAttentions(map);
        List<EsAttention> esAttentionList = attentionInfos.getResult();
        for (EsAttention esAttention : esAttentionList){
            if (esAttention.getFocusedType() == 1){//關注的是個人,去除掉參與者身份
                esAttentionList.remove(esAttention);
            }
        }

結果發現會報如下錯誤:

上所示,這是list集合中fail-fast機制,但出現在集合遍歷的時候,改變元素,就會報ConcurrentModificationException,所以利用增強for循環實現該功能是不可行的。

所以,使用Iterator迭代器進行循環遍歷刪除

        Page<EsAttention> attentionInfos = esAttentionMapper.getAttentions(map);
        List<EsAttention> esAttentionList = attentionInfos.getResult();
        Iterator<EsAttention> esAttentionIterator = esAttentionList.iterator();
        while (esAttentionIterator.hasNext()){
             EsAttention esAttention = esAttentionIterator.next();
             if (esAttention.getFocusedType() == 1){//關注的是個人,去除掉參與者身份
                esAttentionIterator.remove();
                    
              }
        }
        

 經測試,使用Iteration是可以達到效果的,但是這里需要注意的一點是,這里是通過iterator的remove()方法來進行刪除的,而不是通過List的remove()方法來刪除,如果還是用List的remove(),依舊會出報上述的錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM