List集合遍历删除符合某一条件的元素

1、为什么不能用For循环进行List便利删除

常规的循环方式例如:
for、forEach等
这两种方式执行删除操作均是删除不干净的,因为使用这种删除的方式其底层都是根据元素的索引值进行删除的,,这种方式下执行删除的只有两种结果:

  • 删除后不会补位导致报空指针异常;
    • for(Object o: obj)方式的情况就属于这种,这种情况下删除的数据不会进行补位,一旦删除某一数据后,在进行循环往下的时候就会发现上一个是空的,会报空指针异常(但是你以为会补位的循环就可以了吗?天真!请看下面这种问题~);
  • 数据删除不干净;
    • 删除不干净的原因:假使集合 list 中元素值为: [1234] ,其中的元素 2 符合删除条件,当删除操作的指针走到 1时,就会触发检测到需要将此指针下数据删掉,因此当 2 被删除,一旦元素2被删除后后方的 3 就会进补,但是在删除完元素2之后,循环到元素3之前,元素3就会进行补位,那么,问题来了,循环判断删除的指针所对应的索引值刚才是1,现在往下走就是2了,而元素3因为补位,导致其元素的索引值变成了1,很好~完美错过了元素3的判断,因此,这种方式也会存在数据删除不干净的问题;

2、List集合遍历删除的正确姿势

采用迭代器

// 构建迭代器对象
Iterator<String> iterator = list.iterator();
// while循环
while (iterator.hasNext()) {
    String li = iterator.next();
    if ("条件".equals(li)) {
        iterator.remove();
    }
}

实战:

for (String r: set) {
    Date hitAt = this.isHit(r);
    if(hitAt == null){
        Iterator<ProcessFlowVO> iterator = ProcessFlowList.iterator();
        while (iterator.hasNext()) {
            ProcessFlowVO s = iterator.next();
            if (r.equals(s.getProjectId())) {
                iterator.remove();
            }
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在Java集合中,如果要根据某一字段删除集合中的相关数据,可以使用迭代器来实现。具体步骤如下: 1. 遍历集合,获取每个元素。 2. 判断当前元素的字段值是否符合删除条件。 3. 如果符合删除条件,则使用迭代器的remove()方法删除元素。 以下是一个示例代码: ```java import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个包含对象的集合 List<Person> personList = new ArrayList<>(); personList.add(new Person("Alice", 20)); personList.add(new Person("Bob", 25)); personList.add(new Person("Charlie", 30)); // 根据字段值删除集合中的相关数据 Iterator<Person> iterator = personList.iterator(); while (iterator.hasNext()) { Person person = iterator.next(); if (person.getAge() > 25) { iterator.remove(); } } // 输出删除后的集合 for (Person person : personList) { System.out.println(person.getName() + " - " + person.getAge()); } } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 上述代码中,我们创建了一个Person类作为集合中的元素,其中包含name和age两个字段。通过遍历集合,判断age字段是否大于25,如果大于25,则使用迭代器的remove()方法删除元素。最后输出删除后的集合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风暖云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值