Java Lambda 入门系列(01)简介
2018-06-26 本文已影响0人
_Morrowind
Java Lambda 入门系列(01)简介
英文原文地址:http://www.java2s.com/Tutorials/Java/Java_Lambda/index.htm
Lambda表达式是一个有着参数和方法体的匿名函数
Lambda表达式可以是一段代码也可以是一个表达式。
‘->’分隔开了参数和方法体。例如下边的
(int x) -> x+1
接受一个int型参数,将参数加1后返回。
(int x, int y) -> x + y
接受两个int型参数,将两个参数加和后返回。
(String msg)->{System.out.println(msg);}
接受一个String的参数,方法体将传入参数打印出来。
msg->System.out.println(msg)
同样是接受一个参数msg, 然后将参数打印现来,和上面一行代码是等效的。
() -> "hi”
不传入参数,返回一个string.
(String str) -> str.length()
接受一个String参数并返回它的长度。
下边的代码则是接受两个int参数,返回两个参数中较大的一个:
(int x, int y) -> {
int max = x > y ? x : y;
return max;
}
为何需要Lambda表达式
Lambda表达式让我们以一种更为紧凑的方式来编写代码。
下边一段代码展示了利用内部类(inner class)为button的click事件添加事件处理器(event handlers):
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hi");
}
});
在button执行click动作时, 事件处理器将打印一条message : “hi”.
利用lambda表达式,我们只需要一行简单的代码就可以为button的click事件添加事件处理器
button.addActionListener(e -> System.out.println("hi"));
注意到了吗?
和传入一个实现ActionListener接口匿名内部类相比起来, lambda表达式只传入了一小段代码。其中
e 是传入参数的名字,
-> 则分隔开了参数和lambda表达式的方法体
在Lambda表达式中,参数e并没有声明为何种类型的参数, Java编译器(javac)会根据e的上下文环境(context)来推断出e的类型。