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(),依舊會出報上述的錯誤。
