首页 > 其他分享 >循环删除 List 中的元素

循环删除 List 中的元素

时间:2023-09-19 15:44:26浏览次数:45  
标签:删除 List 元素 list initList str Test public

一、背景

一个需求的技术点,需要循环删除 List 中的元素

二、实现

怎么删除 List 中姓李的人?

public List<String> initList = Arrays.asList("张三", "李四", "周一", "刘四", "李强", "李白");

1、普通 for 循环删除(不可靠)

点击查看代码
@Test
public void remove1() {
    List<String> list = new ArrayList(initList);
    for (int i = 0; i < list.size(); i++) {
        String str = list.get(i);
        if (str.startsWith("李")) {
            list.remove(i);
        }
    }
    System.out.println(list);
}

输出结果:

[张三, 周一, 刘四, 李白]

2、普通 for 循环提取变量删除(抛异常)

点击查看代码
@Test
public void remove2() {
    List<String> list = new ArrayList(initList);
    int size = list.size();
    for (int i = 0; i < size; i++) {
        String str = list.get(i);
        if (str.startsWith("李")) {
            list.remove(i);
        }
    }
    System.out.println(list);
}

输出结果:
image
因为 size 变量是固定的,但 list 的实际大小是不断减小的,而 i 的大小是不断累加的,一旦 i >= list 的实际大小肯定就异常了。

3、普通 for 循环倒序删除(可靠)

点击查看代码
@Test
public void remove3() {
    List<String> list = new ArrayList(initList);
    for (int i = list.size() - 1; i > 0; i--) {
        String str = list.get(i);
        if (str.startsWith("李")) {
            list.remove(i);
        }
    }
    System.out.println(list);
}

输出结果:

[张三, 周一, 刘四]

4、增强 for 循环删除(抛异常)

点击查看代码
@Test
public void remove3() {
    List<String> list = new ArrayList(initList);
    for (String element : list) {
        if (element.startsWith("李")) {
            list.remove(element);
        }
    }
    System.out.println(list);
}

输出结果:

image

5、迭代器循环迭代器删除(可靠)

点击查看代码
@Test
public void remove4() {
    List<String> list = new ArrayList(initList);
    for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
        String str = iterator.next();
        if (str.contains("李")) {
            iterator.remove();
        }
    }
    System.out.println(list);
}

输出结果:

[张三, 周一, 刘四]

6、迭代器循环集合删除(抛异常)

点击查看代码
@Test
public void remove5() {
    List<String> list = new ArrayList(initList);
    for (Iterator<String> ite = list.iterator(); ite.hasNext(); ) {
        String str = ite.next();
        if (str.contains("李")) {
            list.remove(str);
        }
    }
    System.out.println(list);
}

image

7、集合 forEach 方法循环删除(抛异常)

点击查看代码
@Test
public void remove6() {
    List<String> list = new ArrayList(initList);
    list.forEach((e) -> {
        if (e.contains("李")) {
            list.remove(e);
        }
    });
    System.out.println(list);
}

image

8、stream filter 过滤(可靠)

点击查看代码
@Test
public void remove7() {
    List<String> list = new ArrayList(initList);
    list = list.stream().filter(e -> !e.startsWith("李")).collect(Collectors.toList());
    System.out.println(list);
}

输出结果:

[张三, 周一, 刘四]

三、遇到的报错

四、参考博客

标签:删除,List,元素,list,initList,str,Test,public
From: https://www.cnblogs.com/lcaiqin/p/17714814.html

相关文章

  • List 去重的 6 种方法
    一、HashSet去重我们知道HashSet天生具备“去重”的特性,那我们只需要将List集合转换成HashSet集合就可以了,实现代码如下:点击查看代码publicclassListDistinctExample{publicstaticvoidmain(String[]args){List<Integer>list=newArrayList<Int......
  • Exchange 2019 服务器实战化操作-- 6. Outlook 邮件彻底删除之后的恢复
    ==回顾:==上篇文章我们介绍了如何配置Exchangeserver2019的电子数据展示和保留,该功能将有助于企业合规部门对于用户邮件的审查和诉讼保留,今天我们要学习的对象同样也是Exchange非常重要而且很实用的一个功能:SingleItemRecovery,也就是说邮件在客户端删除后的恢复,如果已删除项......
  • 短视频app源码,Android TextView文字,删除线以及下划线
    短视频app源码,AndroidTextView文字,删除线以及下划线1、删除线 TextViewtextview=(TextView)view.findViewById(R.id.textviewk);textview.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);​2、下划线 TextViewtextview=(TextView)view.findViewById(R.id.textvi......
  • 元素操作(克隆、插入指定位置)
    元素克隆varsourceNode=document.getElementById("div-0");//获得被克隆的节点对象varclonedNode=sourceNode.cloneNode(true);//克隆节点clonedNode.setAttribute("id","div-"+i);//修改一下id值,避免id重复参考文献:https://blo......
  • 删除链表的节点
    一、问题描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用C或C++语言,你不需要free或delete被删除的节点# 二、......
  • elementplus django drf 如何做到确认单据禁止删除
    elementplusdjangodrf如何做到确认单据禁止删除  要在Django和DjangoRestFramework(DRF)中实现禁止删除确认单据的功能,你可以通过以下步骤来完成:创建模型:首先,你需要在Django中创建一个模型来表示确认单据。这个模型应该包含与确认单据相关的所有信......
  • 文件操作(判断状态、删除、新建、复制、清空文件内容、获取文件长度)
     判断状态#include<io.h>int_access(constchar*path,intmode);返回值:0表示允许访问,-1表示禁止访问CreateFileHANDLEhFile=CreateFile("c://123.bmp",GENERIC_WRITE|GENERIC_READ,OPEN_EXISTING,//OPEN_EXISTINGFILE_ATTRIBUTE_NORMAL,NULL);......
  • Java8中遍历Map、Map转List、List转Map
    1.遍历MapMap<Integer,String>map=newHashMap<>();map.put(1,"a");map.put(2,"b");map.put(3,"c");//Map.keySet遍历for(Integerk:map.keySet()){ System.out.println(k+"==>"+map.get(k));......
  • VC 移动,复制,删除文件(SHFileOperation)时显示动画
    比较乱凑合看吧总结一下SHFileOperation的用法,希望对大家有用//删除文件或者文件夹boolDeleteFile(char*lpszPath){SHFILEOPSTRUCTFileOp={0};FileOp.fFlags=FOF_ALLOWUNDO|//允许放回回收站FOF_NOCONFIRMATION;//不出现确认对话框FileOp.pFrom=......
  • listview排序
    intWINAPICustomSortProc(LPARAMItem1,LPARAMItem2,LPARAMParamSort){staticboolb=true;if(b){b=false;return-CompareText(((TListItem*)Item1)->Caption,((TListItem*)Item2)->Caption);}......