提示:自己学习帮助记忆,有问题指出,不喜勿喷!
lambda:
lambda表达式时jdk8推出的重要新特性之一,使用它设计的代码会更加简洁,当开发者在编写lambda表达式时,也会随之被编译成一个函数式接口。
提示:素材来源于网络整合
可以将lambda表达式理解为匿名函数
,允许将一个函数作为另一个函数的参数,我们可以把lambda表达式理解为一段可以传递的代码(将代码作为实参),也可以理解为函数式编程
,将一个函数作为参数进行传递。
在Java中万物皆对象,Java一直致力维护其对象至上的,在Java的世界里,函数无法独立存在,只能依赖对象调用,在函数式编程
语言中,函数时一等共民,他们可以独立存在,你可以将其赋值给一个变量,或将他们当作参数传给其他函数。JavaScript就是函数式编程典型代表
(parameters) -> expression
或者
(parameters) ->{ statements; }
()
用来描述参数列表,{}
用来描述方法体,->
为lambda运算符,parameters表示参数,expression表示表达式,statements表示代码块。
()-> 28
(int a)
与(a)
效果相同(a,b)
或者(int a,int b)
或 (String a, int b, float c)
{}
可省略,匿名函数的返回值类型与肢体保持一致()
可省略,例如:a - > return a + a
{}
中(形成代码块),匿名函数的返回类型与代码块的返回类型一致,若没有返回则为空lambda表达式的使用比较依赖接口,并对接口有要求。虽然使用lambda表达式可以对某些接口进行简单的实现,但不是所有的接口都可以使用lambda表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法(即只能有一个抽象方法),不是规定接口中只能有一个方法,这也称之为“函数式接口”,比如:java.lang.Runnable
就是一个函数式接口。
注意:jdk 8 中有另一个新特性:default, 被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响 Lambda 表达式的使用。