删除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