Java集合中removeIf的使用
Posted jerry-m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合中removeIf的使用相关的知识,希望对你有一定的参考价值。
在JDK1.8中,Collection以及其子类新加入了removeIf方法,作用是按照一定规则过滤集合中的元素。这里给读者展示removeIf的用法。
首先设想一个场景,你是公司某个岗位的HR,收到了大量的简历,为了节约时间,现需按照一点规则过滤一下这些简历。比如这个岗位是低端岗位,只招30岁以下的求职者。
1 Collection<Person> collection = new ArrayList(); 2 collection.add(new Person("张三", 22, "男")); 3 collection.add(new Person("李四", 19, "女")); 4 collection.add(new Person("王五", 34, "男")); 5 collection.add(new Person("赵六", 30, "男")); 6 collection.add(new Person("田七", 25, "女")); 7 8 Stream<Person> personStream = collection.stream().filter( 9 person -> "男".equals(person.getGender())//只保留男性 10 ); 11 12 collection = personStream.collect(Collectors.toList());//将Stream转化为List 13 System.out.println(collection.toString());//查看结果
该Person
类只有三个成员属性,分别是姓名name
,年龄age
和性别gender
。现要过滤age大于等于30的求职者。
下面是不用removeIf
,而是使用Iterator
的传统写法:
1 Collection<Person> collection = new ArrayList(); 2 collection.add(new Person("张三", 22, "男")); 3 collection.add(new Person("李四", 19, "女")); 4 collection.add(new Person("王五", 34, "男")); 5 collection.add(new Person("赵六", 30, "男")); 6 collection.add(new Person("田七", 25, "女")); 7 //过滤30岁以上的求职者 8 Iterator<Person> iterator = collection.iterator(); 9 while (iterator.hasNext()) { 10 Person person = iterator.next(); 11 if (person.getAge() >= 30) 12 iterator.remove(); 13 } 14 System.out.println(collection.toString());//查看结果
下面再看看使用removeIf
的写法:
1 Collection<Person> collection = new ArrayList(); 2 collection.add(new Person("张三", 22, "男")); 3 collection.add(new Person("李四", 19, "女")); 4 collection.add(new Person("王五", 34, "男")); 5 collection.add(new Person("赵六", 30, "男")); 6 collection.add(new Person("田七", 25, "女")); 7 8 9 collection.removeIf( 10 person -> person.getAge() >= 30 11 );//过滤30岁以上的求职者 12 13 System.out.println(collection.toString());//查看结果
通过removeIf
和lambda
表达式改写,原本6行的代码瞬间变成了一行!
运行结果:
[Person{name=‘张三’, age=22, gender=‘男’}, Person{name=‘李四’, age=19, gender=‘女’}, Person{name=‘田七’, age=25, gender=‘女’}] Process finished with exit code 0
30岁以上的王五和赵六都被过滤掉了。
当然,如果对lambda
表达式不熟悉的话,也可以使用不用lambda
的removeIf
,代码如下:
1 Collection<Person> collection = new ArrayList(); 2 collection.add(new Person("张三", 22, "男")); 3 collection.add(new Person("李四", 19, "女")); 4 collection.add(new Person("王五", 34, "男")); 5 collection.add(new Person("赵六", 30, "男")); 6 collection.add(new Person("田七", 25, "女")); 7 8 collection.removeIf(new Predicate<Person>() { 9 @Override 10 public boolean test(Person person) { 11 return person.getAge()>=30;//过滤30岁以上的求职者 12 } 13 }); 14 15 System.out.println(collection.toString());//查看结果
效果和用lambda
一样,只不过代码量多了一些。
-------------------------文章转自网络 本文为博主「黄嘉成」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
以上是关于Java集合中removeIf的使用的主要内容,如果未能解决你的问题,请参考以下文章
Java 8 数据过滤,removeIf 和 filter 别用错了!!
Kotlin 集合也可以进行+= -= 还可以根据条件进行删除(removeIf)