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

 更新时间:2024年04月22日 09:53:46   作者:渐暖°  
java List删除指定元素有四种方法,分别是普通for循环,增强for循环,CopyOnWriteArrayList以及原生的Iterator迭代器循环来删除list中指定的某个元素,非常的简单,并通过代码示例讲解的非常详细,需要的朋友可以参考下

删除元素

第一种:迭代器

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

第二种: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());

拓展:Java中list如何利用遍历进行删除操作

1、for循环:

常见初五写法:(由于下标问题达不到想要效果)

for(int i=0;i<list.size();i++){
    if(list.get(i).equals("del"))
        list.remove(i);
}

应该改为:(倒序操作避免下标问题)

int size = list.size();
for(int i=size-1;i>=0;i--){
    if(list.get(i).equals("del"))
        list.remove(i);
}

2、增强for循环(foreach循环):

常见错误:(会抛出ConcurrentModificationException)

for(String x:list){
    if(x.equals("del"))
        list.remove(x);
}

应改为:

//cowlist为原list
CopyOnWriteArrayList<Record> list = new CopyOnWriteArrayList<Record>(cowList);
for(String x:list){
    if(x.equals("del"))
        list.remove(x);
}

3、iterator遍历:(注意要是用迭代器的remove方法,不能使用list的remove方法)

Iterator<String> it = list.iterator();
while(it.hasNext()){
    String x = it.next();
    if(x.equals("del")){
        it.remove();
    }
}

最好使用Iterator遍历。

到此这篇关于Java中List根据条件删除元素的几种方式的文章就介绍到这了,更多相关Java List条件删除元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java9 Stream Collectors新增功能(小结)

    Java9 Stream Collectors新增功能(小结)

    这篇文章主要介绍了Java9 Stream Collectors新增功能(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Java的SPI机制以及基于SPI编程示例详解

    Java的SPI机制以及基于SPI编程示例详解

    这篇文章主要为大家介绍了Java的SPI机制以及基于SPI编程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 深入解析Java的Servlet过滤器的原理及其应用

    深入解析Java的Servlet过滤器的原理及其应用

    这篇文章主要介绍了深入解析Java的Servlet过滤器的原理及应用,Java编写的Servlet通常是一个与网页一起作用于浏览器客户端的程序,需要的朋友可以参考下
    2016-01-01
  • Java中结束循环的方法

    Java中结束循环的方法

    这篇文章主要介绍了Java中结束循环的方法,文中有段代码在return,结束了整个main方法,即使输出hello world的语句位于循环体外,也不会被执行,对java结束循环方法感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • java 遍历Map及Map转化为二维数组的实例

    java 遍历Map及Map转化为二维数组的实例

    这篇文章主要介绍了java 遍历Map及Map转化为二维数组的实例的相关资料,希望通过本文能帮助到大家,实现这样的功能,需要的朋友可以参考下
    2017-08-08
  • 从零开始学Java之关系运算符

    从零开始学Java之关系运算符

    今天带大家复习Java关系运算符,文中对Java运算符相关知识作了详细总结,对正在学习java基础的小伙伴们很有帮助,需要的朋友可以参考下
    2021-08-08
  • java使用ArrayList遍历及效率比较实例分析

    java使用ArrayList遍历及效率比较实例分析

    这篇文章主要介绍了java使用ArrayList遍历及效率比较,实例分析了ArrayList遍历的方法与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • java正则表达式的应用 java读取文件并获取电话号码

    java正则表达式的应用 java读取文件并获取电话号码

    这篇文章主要介绍了java正则表达式的应用,应用的内容是java读取文件并获取电话号码,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • Java单例模式下的MongoDB数据库操作工具类

    Java单例模式下的MongoDB数据库操作工具类

    这篇文章主要介绍了Java单例模式下的MongoDB数据库操作工具类,结合实例形式分析了java基于单例模式下操作MongoDB数据库相关连接、查询、插入、删除等操作封装技巧,需要的朋友可以参考下
    2018-01-01
  • swing组件JScrollPane滚动条实例代码

    swing组件JScrollPane滚动条实例代码

    这篇文章主要介绍了swing组件JScrollPane滚动条实例代码,分享了两个相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02

最新评论