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());//查看结果

通过removeIflambda表达式改写,原本6行的代码瞬间变成了一行!
运行结果:

[Person{name=‘张三’, age=22, gender=‘男’}, Person{name=‘李四’, age=19, gender=‘女’}, Person{name=‘田七’, age=25, gender=‘女’}]
Process finished with exit code 0

30岁以上的王五和赵六都被过滤掉了

当然,如果对lambda表达式不熟悉的话,也可以使用不用lambdaremoveIf,代码如下:

 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集合中filter的使用,保留集合中符合条件的元素

Java 8 数据过滤,removeIf 和 filter 别用错了!!

Java8中List的removeif()函数的使用示例

Kotlin 集合也可以进行+= -= 还可以根据条件进行删除(removeIf)

Java—Java 8 新增特性详解(Predicate和Stream)

java集合-Java8新增的Predicate操作集合