Java Lambda 入门系列(01)简介

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的类型。

你可能感兴趣的:(Java Lambda 入门系列(01)简介)