JAVA中简单的for循环竟有这么多坑,你踩过吗

本文讨论了在Java中使用for循环删除List元素时可能遇到的并发修改异常问题,分析了错误的foreach和下标循环操作为什么会抛出异常或导致逻辑错误。并介绍了正确的迭代器方式、Lambda表达式、Stream流操作以及中间对象辅助方法来避免这些问题。通过这些方法,可以确保在循环中安全地删除List元素。
摘要由CSDN通过智能技术生成

实际的业务项目开发中,大家应该对 从给定的list中剔除不满足条件的元素 这个操作不陌生吧?

很多同学可以立刻想出很多种实现的方式,但你想到的这些实现方式都是 人畜无害 的吗?很多看似正常的操作其实背后是个陷阱,很多新手可能稍不留神就会掉入其中。

倘若不幸踩中:

  • 代码运行时直接抛异常报错,这个算是不幸中的万幸,至少可以及时发现并去解决

  • 代码运行不报错,但是业务逻辑莫名其妙的出现各种奇怪问题,这种就比较悲剧了,因为这个问题稍不留神的话,可能就会给后续业务埋下隐患。

那么,到底有哪些实现方式呢?哪些实现方式可能会存在问题呢?这里我们一起探讨下。注意哦,这里讨论的可不是茴香豆的“茴”字有有种写法的问题,而是很严肃很现实也很容易被忽略的技术问题。

假设需求场景:

给定一个用户列表allUsers,需要从该列表中剔除隶属部门为dev的人员,将剩余的人员信息返回

踩坑操作

foreach循环剔除方式

很多新手的第一想法就是for循环逐个判断校验下然后符合条件的剔除掉就行了嘛~ so easy...

1分钟就把代码写完了:

 
 

public List<UserDetail> filterAllDevDeptUsers(List<UserDetail> allUsers) { for (UserDetail user : allUsers) { // 判断部门如果属于dev,则直接剔除 if ("dev".equals(user.getDepartment())) { allUsers.remove(user); } } // 返回剩余的用户数据 return allUsers; }

然后信心满满的点击了执行按钮:

 
 

java.util.ConcurrentModificationException: null at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) at java.util.ArrayList$Itr.next(ArrayList.java:859) at com.veezean.demo4.UserService.filterAllDevDeptUsers(UserService.java:13) at com.veezean.demo4.Main.main(Main.java:26)

诶? what are you 弄啥嘞?咋抛异常了?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值