Java集合中removeIf的使用,过滤集合中符合条件的元素

Posted 默慊$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合中removeIf的使用,过滤集合中符合条件的元素相关的知识,希望对你有一定的参考价值。

在JDK1.8中,Collection以及其子类新加入了removeIf方法,作用是按照一定规则过滤集合中的元素。这里给读者展示removeIf的用法。
首先设想一个场景,你是公司某个岗位的HR,收到了大量的简历,为了节约时间,现需按照一点规则过滤一下这些简历。比如这个岗位是低端岗位,只招30岁以下的求职者。

Person类只有三个成员属性,分别是姓名name,年龄age和性别gender。现要过滤age大于等于30的求职者。
下面是不用removeIf,而是使用Iterator的传统写法:

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));
//过滤30岁以上的求职者
Iterator<Person> iterator = collection.iterator();
while (iterator.hasNext()) {
    Person person = iterator.next();
    if (person.getAge() >= 30)
        iterator.remove();
}
System.out.println(collection.toString());//查看结果

下面再看看使用removeIf的写法:

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));


collection.removeIf(
	person -> person.getAge() >= 30
);//过滤30岁以上的求职者

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,代码如下:

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));

collection.removeIf(new Predicate<Person>() {
    @Override
    public boolean test(Person person) {
	    return person.getAge()>=30;//过滤30岁以上的求职者
    }
});

System.out.println(collection.toString());//查看结果

效果和用lambda一样,只不过代码量多了一些。

以上是关于Java集合中removeIf的使用,过滤集合中符合条件的元素的主要内容,如果未能解决你的问题,请参考以下文章

Java集合中filter的使用,保留集合中符合条件的元素

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

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

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

java8 数据集过滤removeIf和filter

Java8 List集合移除满足条件的元素