一、函数式思想概述
面向对象思想:做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情(重点在对象)
函数式编程思想:只要能获取到结果,怎么做的都不重要,重要在结果(不是很理解啊)
二、函数式接口
函数式接口指:有且仅有一个抽象方法的接口
函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导
三、函数式接口语法
修饰符 interface 接口名称 {public abstract 返回值类型 方法名称(可选参数信息);// 其他非抽象方法内容}
@FunctionalInterface注解
Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。该注 解可用于一个接口的定义上:
@FunctionalInterfacepublic interface MyFunctionalInterface {void myMethod();}注意:如果接口中只有一个接口,那么注解也可以省略
四、lambda表达式语法
2.1、初体验
public class DemoOne {public static void main(String[] args) {//创建一个对象RunnableImpl run = new RunnableImpl();new Thread(run).start();//匿名内部类写法//匿名内部类本质是实现了接口的无名类new Thread(new Runnable() {@Overridepublic void run() {System.out.println("一个线程创建啦");}}).start();//lambda表达式写法new Thread(() -> {System.out.println("*********一个线程创建啦");}).start();}}
2.2、语法
lamdba表达式的标准格式
参数
箭头
代码块
(参数类型 参数名称) —> {代码语句}小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。-> 是新引入的语法格式,代表指向动作大括号内的语法与传统方法体要求基本一致lambda表达式的简化写法小括号内的参数类型可以省略如果小括号内有且只有一个参数,则小括号可以省略如果大括号内有且只有一个语句,则无论是否有返回值,可以省略大括号,return关键字以及语句分号
@FunctionalInterfacepublic interface Runnable {public abstract void run();}public class DemoOne {public static void main(String[] args) {//lambda表达式写法new Thread(() -> {System.out.println("*********一个线程创建啦");}).start();}}() -> {}() - 代表run方法中的参数{} - 代表run方法的实现抛开实现原理不说,Java中的Lambda表达式可以被当作是匿名内部类的替代品。如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用函数式接口作为方法参数。
