一.简述
Lambda表达式本是属于JDK1.7的Lambda项目的内容.在JDK1.7开发琪琪,Sun公司由于相继在技术竞争和商业竞争中都深陷泥潭,公司的股票市值跌至仅有高峰时期的3%,已无力推动JDK1.7的研发工作按正常进行.为了尽快结束JDK1.7长期"跳票"的问题,Oracle公司收购Sun公司后不就便宣布将实行"Plan B","Plan B"把不能按时完成的Lambda项目,Jigsaw项目和Coin项目的部分改进延迟到JDK1.8之中(更多详细的请见Java发展史).所以Lambda的功能才在JDK1.8中发布.
Lambda表达式基于数学中的λ演算得名,但是和λ演算的关系又相差甚远.有点像原子弹和质能方程的关系,差别其实还是挺大的.
什么的Lambda表达式呢?
简答来说Lambda表达式就是匿名方法.
匿名方法的概念类似于Anonymous类的不同之处在于它实现了一个函数式接口.
函数式接口是Java8中的新接口概念.函数式接口只能声明一个抽象方法.
函数式接口详细见:
Lambda表达式运行程序员以简洁的方式传递代码,从而使代码更加的简洁.
二. Lambda表达式语法
Lambda表达式包含:
a.参数列表
b.剪头符号(->)
c.正文的Lambda语句
Lambda表达式的语法:
(参数)->{正文语句;}
三.Lambda表达式的使用
1.lambda表达式可以有零个或多个参数
例1:
() -> {System.out.println("Hello World");}
例2:
// 接收两个int型的x,y,返回他们的和
(int x, int y) -> {return x+y;}
2.如果参数的类型可以由编译器决定,那么我们可以忽略在lambda表达式中添加它们。
例1:
(int x, int y) -> {return x+y;} // 带有参数类型
(x,y) -> {return x+y;}; // 忽略参数类型
3.如果只有一个参数。参数的括号可以省略
例1:
x -> {return x+10;}
String s -> System.out.println(s)
4.如果body只有一个表达式,那么return关键字和大括号可以省略
(int x, int y) -> x + y
如果省略返回类型的参数,则编译器将确定默认参数类型。
5.Lambda可以有空参数和空正文语句
例1:
() -> {return “Hello World”;} // 空参数
()->{} // 空参数以及空体
四.调用Lambda表达式
Lambda表达式就像一个方法一样被调用和执行.
对于调用Lambda表达式,我们应该创建一个函数式接口.
例1:
public class MyFuntionalInterface {
interface MyInterface{
void hello();
}
public static void main(String[] args) {
MyInterface infVar = () -> {System.out.println("Hello World");};
infVar.hello();
}
}
五.总结
结合函数式接口章节阅读学习
说个题外话,看到有人说java的Lambda表达式落后C# 8年才出现,并不是java语言落后所致,而是Sun公司的衰落而至.