美文网首页
java8之Lambda表达式笔记

java8之Lambda表达式笔记

作者: 热爱生活的舒舒 | 来源:发表于2018-02-17 11:07 被阅读0次

    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实例

    相关文章

      网友评论

          本文标题:java8之Lambda表达式笔记

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