zoukankan      html  css  js  c++  java
  • 删除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(),依旧会出报上述的错误。

  • 相关阅读:
    [好好学习]在VMware中安装Oracle Enterprise Linux (v5.7)
    [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作
    [烧脑时刻]EL表达式1分钟完事
    Sublime2 破解教程
    全脑瘫IT时代(八)
    全脑瘫IT时代(九)
    迁移完成
    USB Debug Cable (一)
    一个不是很常见的.Net Interop问题
    全脑瘫IT时代(十二)
  • 原文地址:https://www.cnblogs.com/luxianyu-s/p/10287685.html
Copyright © 2011-2022 走看看