目录前言Lambda表达式语法案例几种场景公式使用Lambda的函数式接口总结Lambda表达式语法Lambda语法非常简单,类似如下结构:(参数)->表达式或(参数)->{语句;}Lambda表达式由三部分组成:1.Paramaters:类似于方法中的形参列表,这里的参数就是函数式接口中的参数。这里的参数类型可以显式声明,也可以不声明而由JVM隐式推断。此外,当只有一种推断类型时,可以省略括号。2.->:可以理解为“用于”3.方法体:可以是表达式,也可以是代码块,是函数式接口中方法的实现。代码块可以有返回值,也可以什么都不返回,其中代码块block相当于方法的方法体。如果它是一个表达式,它也可以返回一个值或什么都不返回。caseLambda表达式本质上是一个匿名方法,比如publicintadd(intx,inty){returnx+y;}用Lambda表达式可以写成(intx,inty)->{returnx+y;},左边是函数method参数,右边是实现体。可以更简洁一点,就是参数类型可以省略,java会根据上下文推断(x,y)->{returnx+y;}。如果执行体是语句,return也可以省略,花括号也可以省略。(x,y)->x+y;几个场景接口的抽象方法有几个场景。我们来看看1、无参数、无返回值publicvoidprint(){System.out.println("HelloLambda!");}Lambda表达式写法()->System.out.println("HelloLambda!");典型的就是LambdaRunnabler1=()->System.out.println("HelloLambda!");r1.run();2,1个参数,无返回值publicvoidprint(Stringstr){System.out.println("Hello"+str);}Lambda写法(str)->System.out.println("你好"+str);如果是1个参数,可以去掉括号str->System.out.println("Hello"+str);3.多参数带返回值,多语句publicintadd(intx,inty){System.out.println("Executeaddition!");returnx+y;}Lambda的写法(x,y)->{System.out.println("ExecuteAdditionoperation!");returnx+y;}因为这里有多个语句,所以必须用花括号。4.多参数,返回值,一条语句,省略花括号返回publicintadd(intx,inty){returnx+y;}用Lambda表达式可以写成(x,y)->x+y;链接:左右一个括号保存左边一个参数,括号可以省略;右边是一个可以省略花括号的语句。链接:左边的推断类型保存了左边的参数类型,JAVA可以根据上下文进行推断看看什么是函数式接口:如果接口中只有一个抽象方法,则称为函数式接口,可以通过注解@FunctionlInterface来识别,可以判断是否是函数式接口。下面定义一个操作接口@FunctionalInterface//Functional接口声明publicinterfaceMyFunction{publicIntegergetValue(Integernum);}注意必须只有一个抽象方法需要实现一个通用函数来实现publicIntegeroperation(Integernum,MyFunctionmf){returnmf.getValue(num);}测试Lambda用在什么地方其实上面的lambda用在什么地方就知道了,跟函数式接口一起用。lambda表达式必须与函数式接口的抽象函数描述具有相同的参数类型,其返回类型也必须与抽象函数的返回类型兼容,其可以抛出的异常仅限于函数范围内描述。自定义一个函数接口,F是参数,T是返回值@FunctionalInterfaceinterfaceConverter
