新建网站做优化,个人网站设计论文前言,免费logo设计在线生成器官网,网站建设销售好做嘛定义 什么是合格的函数#xff1f;无论多少次执行函数#xff0c;只要输入一样#xff0c;输出就不会改变 对象方法的简写 其实在类中#xff0c;我们很多参数中都有一个this#xff0c;被隐藏传入了 函数也可以作为对象传递#xff0c;lambda就是很好的例子 函数式接口中…定义 什么是合格的函数无论多少次执行函数只要输入一样输出就不会改变 对象方法的简写 其实在类中我们很多参数中都有一个this被隐藏传入了 函数也可以作为对象传递lambda就是很好的例子 函数式接口中经常这么使用定义方法名具体的方法实现等待外界传入 示例 客户端有操作的函数 服务器端有数据 public class Client {// 操作在客户端interface MyLambda extends Serializable {int fun(int a, int b);}public static void main(String[] args) throws IOException {Socket socket new Socket(127.0.0.1,8888);MyLambda lambda (a, b) - a b;OutputStream outputStream socket.getOutputStream();ObjectOutputStream objectOutputStream new ObjectOutputStream(outputStream);objectOutputStream.writeObject(lambda);}
}服务器端 public class Server {// 数据在服务器端public static void main(String[] args) throws IOException, ClassNotFoundException {ServerSocket serverSocket new ServerSocket(8888);while(true){Socket socket serverSocket.accept();InputStream inputStream socket.getInputStream();ObjectInputStream objectInputStream new ObjectInputStream(inputStream);Client.MyLambda myLambda (Client.MyLambda) objectInputStream.readObject();System.out.println(myLambda.fun(1,2));}}
}函数对象优点1-行为参数化 操作的对象一直但是操作的方式千千万 我们可以将共同的部分提取为一个方法将不同的操作的行为将行为作为参数传递给这个方法上述的操作的方式就是行为参数化 过滤接口-定义过滤行为
/*** 学生过滤接口*/
interface StudentFilter {boolean test(Student student);
}过滤器
/*** 过滤学生* param students 学生列表* param filter 过滤条件* return 过滤后的学生列表*/
public static ListStudent filterStudent(ListStudent students, StudentFilter filter) {ListStudent list new ArrayList();for (Student student : students) {if (filter.test(student)) {list.add(student);}}return list;
}使用的时候传递行为即可 统一调用 filterStudent 方法使用lambda传递不同行为即可当然也可以使用匿名内部类不太简洁而已 // 随机定义个Student列表
ListStudent students List.of(new Student(张三, 18, 男),new Student(李四, 19, 女),new Student(王五, 20, 男),new Student(赵六, 21, 女)
);
System.out.println(学生列表);
students.forEach(System.out::println);// 过滤出年龄大于18的学生
ListStudent ageFilter filterStudent(students, student - student.getAge() 18);
System.out.println(年龄大于18的学生);
ageFilter.forEach(System.out::println);// 过滤出性别为男的学生
ListStudent genderFilter filterStudent(students, student - 男.equals(student.getGender()));
System.out.println(性别为男的学生);
genderFilter.forEach(System.out::println);函数对象优点2-延迟执行 函数对象的使用在框架中是十分常见的例如我们常用日志框架 根据不同的日志级别执行不同的日志输出 函数对象 使用函数对象存储日志