删除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(),依旧会出报上述的错误。

posted @ 2019-01-18 15:04  青柳依依  阅读(13823)  评论(0)    收藏  举报