美文网首页
Java Lambda 入门系列(01)简介

Java Lambda 入门系列(01)简介

作者: _Morrowind | 来源:发表于2018-06-26 17:41 被阅读0次

    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)简介

          本文链接:https://www.haomeiwen.com/subject/znmmyftx.html