您的位置:首页 > 编程语言 > Java开发

java8实战之Lambda表达式笔记

2018-02-17 11:08 537 查看
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实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: