2018-08-13Lambda表达式

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

测验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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 概念 Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主...
    刘涤生阅读 3,252评论 5 18
  • 第一章 为什么要关心Java 8 使用Stream库来选择最佳低级执行机制可以避免使用Synchronized(同...
    谢随安阅读 1,526评论 0 4
  •   方法的引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下,比起使用Lambda表达...
    琼珶和予阅读 485评论 0 0
  • 西游本就有许多故事,因西游更是生出许多故事,如同那绚丽的银河,而他们始终是主角! 1、可怕的不是金锢,而是禁锢——...
    吕夭夭阅读 262评论 4 3
  • 梦里不知春已深 余情岂是为他人 冬雪应是天上有 人间无奈花雪纷
    枯叶萧瑟阅读 268评论 24 19