美文网首页
2018-08-13Lambda表达式

2018-08-13Lambda表达式

作者: huxiaofeng | 来源:发表于2018-08-13 18:21 被阅读0次

    简洁地表示可传递的匿名函数的一种方式

    测验3.1:Lambda语法

    根据上述语法规则,以下哪个不是有效的Lambda表达式?
    (1) () -> {}
    (2) () -> "Raoul"
    (3) () -> {return "Mario";}
    (4) (Integer i) -> return "Alan" + i;
    (5) (String s) -> {"IronMan";}
    答案:只有4和5是无效的Lambda。
    (1) 这个Lambda没有参数,并返回void。它类似于主体为空的方法:public void run() {}。
    (2) 这个Lambda没有参数,并返回String作为表达式。
    (3) 这个Lambda没有参数,并返回String(利用显式返回语句)。
    (4) return是一个控制流语句。要使此Lambda有效,需要使花括号,
        如下所示:(Integer i) -> {return "Alan" + i;}。
    (5)“Iron Man”是一个表达式,不是一个语句。要使此Lambda有效,你可以去除花括号和分号,
        如下所示:(String s) -> "Iron Man"。或者如果你喜欢,可以使用显式返回语句,
        如下所示:(String s)->{return "IronMan";}。
    

    函数式接口

    • 就是只定义一个抽象方法的接口。

    方法引用

    • 方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。
      inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()));
      inventory.sort(comparing(Apple::getWeight));

    方法引用主要有三类

    1. 指向静态方法的方法引用(例如Integer的parseInt方法,写作Integer::parseInt)。
    2. 指向任意类型实例方法的方法引用(例如 String 的 length 方法,写作String::length)。
    3. 指向现有对象的实例方法的方法引用(假设你有一个局部变量expensiveTransaction用于存放Transaction类型的对象,它支持实例方法getValue,那么你就可以写expensive-Transaction::getValue)

    相关文章

      网友评论

          本文标题:2018-08-13Lambda表达式

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