详解java8在Collection中新增加的方法removeIf
作者:纪莫 时间:2022-06-04 20:51:45
记得我在以前找工作的经历中,遇到过一个面试官问过我一个很基础的问题。问题是:有一个List中有10个元素,我现在想从中删除3个元素,请问怎么做?我当时也没想,就直接说,List的有自带的remove方法,可以直接使用,他说请详细的说明一下,我说写一个for循环,循环的次数是List的长度,然后在循环里面直接删除掉想要删除的元素就可以了。
当时还想,这么简单的问题也问,面试官说,你回去自己试试就知道了,你看按照你说的那样写会不会报错。然后我就懵了,虽然这是个简单的问题但是日常的编码中,我还真没有注意过这个小细节,然后面试结果可想而知了。
我回去以后自己真的试了一次还真的会报错,原来在遍历的过程中是不对List操作进行修改的,无论是删除和添加,因为如果在遍历中一直向集合中新增加元素,会造成死循环的,还有就是如果在遍历过程中删除元素,会造成数组下表越界等问题。一般的操作方式是通过addAll方法和removeAll方法来实现的功能的。
例如下面的这种
@Test
public void myTestLearnMore()
{
List<String> testList = new ArrayList<>();
testList.add("1杨");
testList.add("1李");
testList.add("1王");
testList.add("1张");
testList.add("2杨");
testList.add("2孙");
testList.add("2赵");
List<String> temAddList = new ArrayList<>();
for(String test : testList)
{
if(test.startsWith("1"))
{
temAddList.add(test);
}
}
testList.removeAll(temAddList);
System.out.println(JSON.toJSONString(testList));
}
打印结果是:[“2杨”,”2孙”,”2赵”]
这才是真正的操作方式。不过今天我要说的其实Java8的新增的集合方法,像上面先创建一个临时集合然后再通过遍历将需要移除的元放到临时集合中,最后再整体从原始集合中删除。这样要写五六行的代码,在java8中用一行代码就可以搞定了。就是下面这行代码:
testList.removeIf(test->test.startsWith("1"));
这句代码的意思是移除符合removeIf参数格式的元素,所以在这行代码后面再打印testList,就不会打印出以1开头的元素了。
这些小细节其实都是在日常的编码过程中积累出来的,遇到的坑多了,以后再写的时候就会注意了,就像是java中在使用equals的时候,从来都是已知的常量放equals前面,防止出现空指针异常,在集合使用lambda表达式的时候,都要通过Objects.nonNull()先判断集合是不是null,在打印对象的时候不要直接调用对象的toString()方法,要将对象传递给Objects的toString方法,这样就算对象是个null也可以打印出来。Objects这个类是java7新增的工具类。
总结
以上所述是小编给大家介绍的java8在Collection中新增加的方法removeIf ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
来源:https://www.cnblogs.com/jimoer/archive/2018/01/21/8322421.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java反射之Method的invoke方法实现教程详解
![](https://img.aspxhome.com/file/2023/2/66632_0s.png)
Java数据结构学习之栈和队列
![](https://img.aspxhome.com/file/2023/3/61593_0s.png)
java代码执行字符串中的逻辑运算方法
简单记事本java源码实例
![](https://img.aspxhome.com/file/2023/4/59744_0s.jpg)
Java线程之守护线程(Daemon)用法实例
Springboot上传文件时提示405问题及排坑过程
![](https://img.aspxhome.com/file/2023/7/63627_0s.png)
Java中实现简单的Excel导出
![](https://img.aspxhome.com/file/2023/0/68730_0s.png)
详解Java中使用泛型实现快速排序算法的方法
Java中StringUtils工具类进行String为空的判断解析
Maven 错误找不到符号的解决方法
![](https://img.aspxhome.com/file/2023/7/62387_0s.png)
Android之复选框对话框用法实例分析
![](https://img.aspxhome.com/file/2023/1/84751_0s.png)
MyBatis字段名和属性名不一致的解决方法
java之CSV大批量数据入库的实现
![](https://img.aspxhome.com/file/2023/0/66170_0s.png)
jQuery.event.trigger()的简单解释
![](https://img.aspxhome.com/file/2023/2/62232_0s.png)
Unity的IPostBuildPlayerScriptDLLs实用案例深入解析
Spring使用xml方式整合第三方框架流程详解
Java Servlet3.0异步处理问题
Eclipse+Java+Swing+Mysql实现工资管理系统
![](https://img.aspxhome.com/file/2023/0/57960_0s.png)
Java 序列化和反序列化实例详解
你所不知道的Spring自动注入详解
![](https://img.aspxhome.com/file/2023/8/60828_0s.png)