Lambda常见用法总结

2019-07-18  本文已影响0人  简洁书写

一、Lambda优化以下问题

1.解决原有匿名内部类语法冗余问题

2.解决作用域指向不明确问题

3.解决多余代码产生的“高度”问题

二、函数式接口

 1.Java API中有的接口只有一个方法,大多数回调接口都拥此个特征:比如Runnable接口和Comparator接口。因此只拥有一个方法的接口称为函数式接口;

 2.lambda为了使匿名接口不在产生冗余代码,使用“箭头”结构表示匿名接口(以下会有示例),同时JAVA SE 8中新增java.util.function包提供了常用的函数式接口:

      Predicate——接收T对象并返回boolean

      Consumer——接收T对象,不返回值

      Function——接收T对象,返回R对象

      Supplier——提供T对象(例如工厂),不接收值

      UnaryOperator——接收T对象,返回T对象

      BinaryOperator——接收两个T对象,返回T对象

三、使用和特性

1.语法:lambda 表达式的语法由 【(参数列表)箭头符号-> {函数体};】组成,例:(String s) -> { System.out.println(s); }

1

2.函数式接口的类型自动推导:

 lambda可自动推导目标类型

例:JavaSE7中的对象:

2 3

JavaSE8 lambda简化后:

4

        *同样的函数体,但表示了不同的类型;第一个lambda表达式【() -> "done"】是Callable的实例,而第二个lambda表    达式【() -> "done"】则是PrivilegedAction的实例。

3.当函数体有返回值时,可省略“return”关键字,省略”;”分号

    例1:接收一个参数(y),返回其2倍的值 

        ( y ) -> 2 * y

   例2:  一个接收String和Object并返回int的函数类型可以被表示为

      (String,Object) -> int

4.简化过程

    *当只有一个参数时,可省略类型

    *当只有一行代码语句时可省略分号和 { },多行语句时不可省略

    *当只有一个返回值时可省略return

            (String x)->{ System.out.print( x ); } 

                可简化为:(x)-> System.out.print( x )

 5. 词法作用域

        *在lambda函数体中,“this”会指向外部,且不会继承超类的变量。

 6. lambda 表达式对 值 封闭,对 变量 开放:

5

 

四、JDK1.8其它相关

1.lambda集合遍历:

      *List集合:

      list.forEach(c->System.out.println(c));

      *map集合

      map.forEach((key,value)->System.out.println("key:" + key + " value:" + value));

2.方法引用

  Java SE8

        提供的方法引用有很多种,需要在类名或对象与方法之间加入双冒号“::“表示,它们的语法如下:

        静态方法引用:ClassName::methodName

        实例上的实例方法引用:instanceReference::methodName

        超类上的实例方法引用:super::methodName

        类型上的实例方法引用:ClassName::methodName

        构造方法引用:Class::new

        数组构造方法引用:TypeName[]::new

6
上一篇 下一篇

猜你喜欢

热点阅读