java8之Lambda表达式笔记

Lambda表达式可以理解为一种匿名函数;没有名称,有参数列表、函数主题、返回类型,可能还有一个可以抛出的异常列表

Lambda表达式3个部分:参数列表;箭头;主体

在哪里使用:在函数式接口上使用

函数式接口:接口只定义了一个抽象方法;

Lambda表达式允许直接以内联的形式作为函数式接口的抽象方法的提供,并把整个表达式作为接口的实例

@FunctionalInterface 表示该接口会设计成一个函数式接口

Lambda表达式使用步骤:1.行为参数化 2.使用函数式接口来传递行为 3.执行一个行为 4.传递Lambda

常用函数式接口:

Predicate    函数描述符 T -> boolean    boolean test(T t) 

Consumer   T -> void          void accept(T t)

Function   T,R -> R     R apply(T t)

Supplier  () -> T   T get() 

Callable  () -> T  T call()

BiFunction R apply(T,U)

还有为原始类型设计的对应接口可以避免装箱。输入参数类型的函数式接口的名称要加上对应的原始类型前缀如:IntPredicate等

类型推断:

Lambda表达式的类型是从使用Lambda的上下文推断出来的;Lambda表达式需要的类型称为目标类型

如果一个Lambda的主题是一个语句表达式,它就和一个返回void的函数描述符兼容

使用局部变量:

局部变量必须显示声明为final

闭包就是一个函数的实例,且它可以无限制地访问那个函数的非本地变量

方法引用:

根据已经有的方法创建Lambda表达式

目标引用在::前,方法名称在后

如何构建方法引用:1.指向静态方法的方法引用(如:Integer :: parseInt)2.指向任意类型实例方法(String :: length)

3.指向现有对象的实例方法

方法引用是否有效:方法引用的签名必须和上下文类型匹配

构造函数引用:

ClassName::new

复合Lambda表达式的有用方法:

1.比较器复合:逆序;比较器链

2.谓词复合:谓词接口包括3个方法:negate;and; or

3.函数复合:Function接口代表的Lambda表达式复合起来; andThen; compose 都返回一个Function实例

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

推荐阅读更多精彩内容

  • 简介 概念 Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主...
    刘涤生阅读 3,223评论 5 18
  • lambda表达式(又被成为“闭包”或“匿名方法”)方法引用和构造方法引用扩展的目标类型和类型推导接口中的默认方法...
    183207efd207阅读 1,499评论 0 5
  • 原文链接: Lambdas 原文作者: shekhargulati 译者: leege100 lambda表达式是...
    忽来阅读 6,621评论 8 129
  • Lambda表达式 利用行为参数化这个概念,就可以编写更为灵活且可重复使用的代码。但同时,使用匿名类来表示不同的行...
    谢随安阅读 885评论 2 0
  • 万里江山随意游 沟壑连山天尽头 特高压线时时见 树外人家隐隐楼 穿山过遂峡连桥 桥下车流云袅袅 绝奇山路呼不出 山...
    象天之性阅读 217评论 0 0