在Java8中,java.util.Collection
接口提供了一个新的方法,Collection.removeIf(),用于根据条件删除集合中的元素,它的出现,可以代替Java8之前使用iterator遍历删除的写法。
为了理解引入此方法的意图,我们首先看看在java7中如何从Collection中删除元素
在此之前先创建一个实体类:
public class Employee {
private String name;
private Integer age;
private Double salary;
public Employee(String name, Integer age, Double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public String toString(){
return "Employee Name:"+this.name
+" Age:"+this.age
+" Salary:"+this.salary;
}
//...省略get、set等方法
}
在Java7中遍历删除的写法:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CollectionRemoveIfExample {
private static List<Employee> employeeList = new ArrayList<>();
public static void main(String[] args) {
employeeList.add(new Employee("关羽", 45, 7000.00));
employeeList.add(new Employee("张飞", 25, 10000.00));
employeeList.add(new Employee("赵云", 65, 8000.00));
employeeList.add(new Employee("吕布", 22, 12000.00));
employeeList.add(new Employee("马超", 29, 9000.00));
Iterator<Employee> empIterator = employeeList.iterator();
while(empIterator.hasNext()){
Employee employee = empIterator.next();
if(employee.getAge() >= 30){
empIterator.remove();
}
}
System.out.println("年龄小于30岁的员工:");
employeeList.forEach(System.out::println);
}
}
运行结果:
在IDEA中编写代码的话,IDEA会自动提示出此处遍历删除应该使用Collection.removeIf方法
Java 8的java.util.Collection
接口添加了一个新默认方法removeIf()
。方法签名为
default boolean removeIf(Predicate<? super E> filter)
使用Java8中Collection.removeIf方法
import java.util.ArrayList;
import java.util.List;
public class CollectionRemoveIfExample {
private static List<Employee> employeeList = new ArrayList<>();
public static void main(String[] args) {
employeeList.add(new Employee("关羽", 45, 7000.00));
employeeList.add(new Employee("张飞", 25, 10000.00));
employeeList.add(new Employee("赵云", 65, 8000.00));
employeeList.add(new Employee("吕布", 22, 12000.00));
employeeList.add(new Employee("马超", 29, 9000.00));
employeeList.removeIf((Employee emp) -> emp.getAge() >= 30);
System.out.println("年龄小于30岁的员工:");
employeeList.forEach(System.out::println);
}
}
运行结果与Java7中写法完全运行结果完全相同。