List根据条件删除元素的几种方式

简介: List根据条件删除元素的几种方式

删除元素

第一种:迭代器

   Iterator<Project> it = projectList.iterator();
            while(it.hasNext()){
                Project p=it.next();
                if (!allProjectMap.containsKey(p.getId())){
                    it.remove();
                };
            }

第三种

使用remove,但是要小心list的size,因为list删除一个元素后面的元素就会前移,所以要倒着删除

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        for (int i = list.size() - 1; i >= 0; i--) {
            String str = list.get(i);
            if ("aa".equals(str)) {
                list.remove(str);
            }
        }
        System.out.println(list.size());
    }
}

第三种:使用CopyOnWriteArrayList

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list);
        for (String str : cowList) {
            if ("aa".equals(str)) {
                cowList.remove(str);
            }
        }
        System.out.println(cowList.size());
    }
}

第四种:双重for循环删除

 for (int i = projectList.size() - 1; i >= 0; i--) {
                    for (int j = projectList.size() - 1; j >= 0; j--) {
                        if (projectList.get(i).getId().equals(projectList.get(j).getId())) {
                            if (projectList.get(i).getHigh() != null && projectList.get(j).getHigh() != null) {
                                if (projectList.get(i).getHigh() > projectList.get(j).getHigh()) {
                                    projectList.remove(j);
                                    i-=1;
                                }
                            }
                        }
                    }
                }

list如何删除空元素

list.removeAll(Collections.singleton(null));

list.removeIf(Objects::isNull);

 List<String> newList = list.stream().filter(Objects::nonNull).collect(Collectors.toList());


目录
相关文章
|
2月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
42 3
List 集合遍历过程中删除元素。这个坑踩一遍就不要再踩了!
List 集合遍历过程中删除元素。这个坑踩一遍就不要再踩了!
|
自然语言处理 Java
遍历list时删除元素发生了什么?
遍历list时删除元素发生了什么?
120 0
|
安全 Java 流计算
【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)(下)
【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)(下)
【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)(下)
|
算法 Java 索引
【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)(上)
【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)(上)
记一次list循环删除元素的突发事件!
事情是这样的,由于想再回顾一下基础,就写了一个main函数,里面循环删元素的代码。如下: List a = new ArrayList(); a.add("a"); a.add("b"); for (String temp : a) { if("a".
1064 0
|
6月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1037 1
|
5月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
5月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。