本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses
学习lambda表达式之前,需要知道什么是函数式编程。
函数式编程不尽相同,但是其核心是,使用不可变的值和函数,函数对一个值进行处理,映射返回成另一个值的过程。
示例1:
hangmeimei.speech(new speak(){
public void speechs(Parameter parameter){
System.out.println("演讲");
}
})
上面的代码核心就是韩梅梅演讲说了一句话,但是因为内部内的样板看起来很是繁琐
使用lambda表达式:hangmeimei.speech(parameter ->System.out.println("演讲"));
parameter与上面的参数名称一样。在使用内部内时候,我们需要显示的将参数的类型写出来,而使用lambda表达式则可以省略参数的类型Parameter。
这是因为javac更具程序的上下文,也就是方法的签名在后台推出了参数parameter的类型Parameter。
尽管与之前相比,lambda表达式中的参数需要的样板代码很少,但是Java8依然是静态类型语言。为了怎加可读性并且迁就我们的习惯,声明参数的时候也可以包括类型的信息,而且有时编译器不一定能根据上下文推出参数的类型!
lambda 表达式除了基本形式之外,还有一下几种变体。
1、Runable noA =()->System.out.println("演讲");
上式中所示的lambda表达式没有参数,使用空()表示没有参数。该lambda表达式实现了Runable接口,该接口也只有一个run方法,且run没有参数,返回类型是void。
2、Dog noA=event ->System.out.println("演讲");
该lambda表达式含有一个参数,可以省略括号。
3、Runable noA()->{
System.out.println("演讲");
System.out.println("演讲");
}
如上所示,lambda表达式的主体不仅可以是一个表达式,也可以是一个代码块。使用大括号括起来。
4、Round add=(x,y)->x+y;
lambda表达式也可以包含多个参数,这个代码不是把两个数相加,而是创建了加法函数,用来计算两个数相加的结果。