随笔:List 集合的删除(JDK1.8)

Forech在遍历List集合的时候是不可以做add/remove操作的。

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

for (String s : list) {
   list.remove(s);
}
报错:
Exception in thread "main" java.util.ConcurrentModificationException

删除集合的方式:
1、普通写法:

   // 容器删除
   Iterator<String> it = list.iterator();
   while(it.hasNext()){
        String next = it.next();
        if("a".equals(next)){
            it.remove();
        }
   }

2、lambda

 // removeIf 方法  1.8提供
 list.removeIf(new Predicate<String>() {
     @Override
     public boolean test(String s) {
         return "a".equals(s);
     }
 });
 // 简化
 list.removeIf((str) -> str.equals("a"));

3、通用写法(类似 removeIf方法 源码):

   // 调用删除集合的操作 将行为
   delete(list, (e) -> { return e.equals("a");});
   
    /**
     * 自定义 删除集合的通用操作
     * @param lists
     * @param predicate
     * @param <T>
     */
    private static <T> void delete(List<T> lists, Predicate<T> predicate){
        Iterator<T> iterator = lists.iterator();
        while(iterator.hasNext()){
            if(predicate.test(iterator.next())){
                iterator.remove();
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/cp026la/article/details/86620870