Lambda表达式

目录

        jdk8新特性

                一、Lambda表达式

                        1.函数式接口:

                        2.语法格式  (抽象方法的参数列表) -> {实现方法的方法体}

                        3.Lambda表达式接口6种写法

                        4.简化Lambda表达式

                ​​​​​​​        5.变量作用域

                ​​​​​​​        6.四大内置核心函数式接口

                ​​​​​​​        7.方法引用(调用方法)


首先让我们来了解一下jdk8的新特性

jdk8新特性
  1. Lambda和Stream流
  2. hashmap数组、链表、红黑树
  3. JVM元空间代替了永久代
一、Lambda表达式
        1.函数式接口:

        有且仅有一个抽象方法的接口。

        在java中函数式接口最主要的体现就是Lambda表达式,只有确保接口中有且仅有一个抽象方法,java中的Lambda才能顺利的进行推导。

        @Functionallnterface 可以放在接口上面,定义一个函数式接口。如果不是函数接口会报红

        语法糖:是指使用更加方便,但是原理不变的代码语法。从应用层面讲,Java中的Lambda可以被当作是匿名内部类的语法糖,但是二者在原理上是不同的。

        匿名内部类:实现了接口或继承父类

        没有名字:(所以在声明匿名内部类的同时,可以指定一个类名, 这个类名只是用于方便调用和查看代码,并不影响实际运行);

        类的主题:成员变量、方法、代码块。

        内部类:在类里边再定义一个类,不能带public(但凡带public的类,类名必 须和文件名一样。)

        2.语法格式  (抽象方法的参数列表) -> {实现方法的方法体}

         例:(o1,o2)  ->  Integer.compare(o1,o2);

                (1) ->是Lambda操作符或箭头操作符

                (2) ->左边是Lambda形参列表(其实就是接口中的抽象方法的参数列表)

                (3) ->右边是lambda体(Lambda 表达式要执行的功能/重写的接口的方法)

        

        3.Lambda表达式接口6种写法:

        无参无返回值、一个参数无返回值、多个参数无返 回值、无参有返回值、一个参数有返回值、多个参数有返回值。

        4.简化Lambda表达式

        可选类型的声明:不需要声明参数类型。

        可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要。

        可选的大括号:如果主体包含了一个语句 ,就不需要使用大括号。

        可选的返回关键字:如果主体只有一个表达式返回值,则编译器会自动返回值。大括号需要指定表达式返回了一个数值。

        5.变量作用域

        访问局部变量要注意3点:

                (1)可以直接在Lambda表达式 中访问外层的局部变量;

                (2)在Lambda表达式当中被引用的变量的值不可以被更改;(本质上因为lambda 用的是         内部类)

                (3)在Lambda表达式当中不允许声明一个与局部变量同名的参数(包括参数名称 也不能         一样) 

        6.四大内置核心函数式接口

        (必须熟悉的知道名字、方法名、参数列表、返回值,包 括工具类中常用的静态方法

        内置接口:Consumer<T>、Supplier<T>、Function<T R>、Predicate<T>

        7.方法引用(调用方法)

        双冒号::为引用运算符,而它所在的表达式被称为方法引用。

        (1)构造方法引用

                格式:类名 :: new

                注意:调用构造方法时,函数式接口的方法参数和构造方法的参数一致,可以是一个参         数,也可以是多个参数

                符合:(方法参数)-> new 对象(构造参数)就可以使用对象 :: new,如果是   有参构         造,参数由方法参数决定

        (2)静态方法引用

                格式:类名 :: 静态方法名

                注意:接口中的方法调用了另一个类的静态方法。要求两个方法的参数一致

        (3)实例方法引用

                格式:类名 :: 方法名

                注意:接口的方法调用了对象的方法,要求两个方法的参数一致。

        (4)对象方法引用

                格式:类名 :: 方法名

                条件:在抽象方法中,参数作为实例方法调用者,可以直接用参数的类去调用   方法。

  • 46
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值