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条件删除元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java发起http请求的完整步骤记录

    Java发起http请求的完整步骤记录

    这篇文章主要给大家介绍了关于Java发起http请求的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Mybatis之RowBounds分页原理详解

    Mybatis之RowBounds分页原理详解

    这篇文章主要介绍了Mybatis之RowBounds分页原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • SpringBoot整合Redis实现消息发布与订阅的示例代码

    SpringBoot整合Redis实现消息发布与订阅的示例代码

    能实现发送与接收信息的中间介有很多,比如:RocketMQ、RabbitMQ、ActiveMQ、Kafka等,本文主要介绍了Redis的推送与订阅功能并集成Spring Boot的实现,感兴趣的可以了解一下
    2022-08-08
  • java开发中遇到的异常汇总详解

    java开发中遇到的异常汇总详解

    这篇文章主要介绍了java开发中遇到的异常汇总详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Java详细介绍单例模式的应用

    Java详细介绍单例模式的应用

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式
    2022-09-09
  • MyBatis通用Mapper中的通用example(排序)详解

    MyBatis通用Mapper中的通用example(排序)详解

    这篇文章主要介绍了MyBatis通用Mapper中的通用example(排序)详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Bean生命周期源码原理图解

    Spring Bean生命周期源码原理图解

    这篇文章主要介绍了Spring Bean生命周期源码原理图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java序列化问题:“Serialized class has not implement Serializable interface”错误的解决方法

    Java序列化问题:“Serialized class has not impl

    在Java开发中,序列化(Serialization)是一个常见的操作,尤其是在分布式系统、网络通信或数据持久化场景中,然而,序列化过程中可能会遇到各种问题,其中最常见的一个错误是Serialized class has not implement Serializable interface,本文给大家介绍了相关的解决方法
    2025-02-02
  • Idea如何集成Git&添加项目到git仓库

    Idea如何集成Git&添加项目到git仓库

    这篇文章主要介绍了Idea如何集成Git&添加项目到git仓库,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • log4j2的高并发死锁问题配置优化方式

    log4j2的高并发死锁问题配置优化方式

    这篇文章主要介绍了log4j2的高并发死锁问题配置优化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论