一、Lambda表达式(https://www.zhihu.com/question/20125256)
可理解为:匿名函数
1.场景:
你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。
2.场景举例:
方法中一部分只用一次,怕代码太长需要代码提取,但是又不想新建一个方法,因为这个方法会污染这个类。
3.理解举例:
map(f,a)——将函数f依次套用在a的每一个元素上,对a中的元素遍历,依次作为参数传入到f中做函数调用
4.java中的lambda表达式:
java使用“函数接口”表示lambda表达式类型:确保对java语言旧版本的向后兼容性的有效途径
1)把一块代码赋值给一个java变量
20180706181850.png
-> 20180706181923.png
被赋值给一个变量的函数->即lambda表达式
2)所有lambda类型都是一个接口,lambda表达式本身就是这个接口类型的实现
3)函数式接口:只有一个接口函数需要被实现的接口类型->函数式接口,
1.png完整的lambda表达式定义
2.png4)总结:lambda表达式,就是函数式接口的实现。
函数式接口 变量名 = lambda表达式
5.作用
把代码变的更简洁
11.pnglambda可以直接赋值给一个变量,故可以把lambda表达式作为参数传给函数
112.png不用去实现java接口
6.java.util.funcation中函数式接口定义
Predicate<T>断言
针对一个参数的断言,返回值boolean
函数:boolean test(T t)
对应两个参数的函数接口:BiPredicate
Consumer<T>消费者
针对一个参数的操作,返回值void,希望通过副作用来操作对象参数
函数:void accept(T t);
对应两个参数的函数接口:BiConsumer
Function<T,R>函数
接受一个参数,并且有一个返回值
函数:R apply(T t)
对应两个参数的函数接口:BiFunction
Supplier<T>函数
提供响应结果,无参数
函数:T get()
对应
Double、Int、Long都有上述对应函数接口
7.配合Optional<T>
网友评论