interface Lambda{
	boolean test(Student student);
}
public class ActionAsParam {  
    static List<Student> filter(List<Student> students, Lambda lamda) {  
        List<Student> filteredStudents = new ArrayList<>();  
        for (Student student : students) {  
            if (lamda.test(student)) {  
                filteredStudents.add(student);  
            }  
        }  
        return filteredStudents;  
    }  
  
    public static void main(String[] args) {  
        List<Student> students = new ArrayList<>();  
        students.add(new Student(1, "Li", 23));  
        students.add(new Student(2, "Zhang", 26));  
  
        System.out.println(filter(students, student -> student.getName().equals("Li")));  
    }  
}

在本代码中,首先编写 filter 作为过滤器,传入 Student List 和 Lambda 函数对象,按照 Lambda 函数对象执行后的结果来完成过滤。这样实现了一个 filter 可以按不同规则过滤,只需要将规则(行为)对象化后作为参数传入即可。

student -> student.getName().equals("Li")) 就是传入的函数对象。其参数是 Student,返回值是布尔类型,执行后会被 if 接收布尔类型来完成余下判断操作。

此处箭头左侧的参数,箭头右侧 return 逻辑部分的返回值都与 Lambda 接口中唯一的方法相同,所以可以用该方法名,来调用这个函数对象

使用这种行为参数化的写法,可以不用将判断逻辑等行为抽取出来,作为传入的参数。解耦并提高了复用性。

LambdaJava