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 接口中唯一的方法相同,所以可以用该方法名,来调用这个函数对象。