14.1.1 lambda表达式简介
1.lambda表达式用来表示匿名函数,也就是没有函数名字的函数。流处理是Java程序中一种重要的数据处理手动,它用少量的代码便可以执行复杂的数据过滤、映射、查找和收集等功能。
2.lambda表达式可以用非常少的代码实现抽象方法。lambda表达式不能独立执行,因此必须实现函数式接口,并且会返回一个函数式接口的对象。
lambda表达式的语法非常特殊,语法格式如下:
()->结果表达式 实现无参方法,单独写一对圆括号表示方法无参数,操作法右侧的结果表达式表示方法的返回值。
参数->结果表达式 实现只有一个参数的方法,参数可以写在圆括号里,或者不写圆括号。
(参数1,参数2,...,参数 n)->结果表达式 实现多参数的方法,所有参数按顺序写在圆括号里,且圆括号不可以省略。
lambda表达式也可以实现复杂方法,将操作符右侧的结果表达式换成代码块即可,语法格式如下:
简单总结:操作符左侧是方法参数,操作符右侧是方法体。
14.1.2 lambda表达式实现函数式接口
1.函数式接口
函数式接口指的是仅包含一个抽象方法的接口,接口中的方法简单明了地说明了接口的用途,如线程接口Runnable、动作事件监听接口ActionListener等。开发者可以创建自定义的函数式接口如:
如果接口中包含一个以上的抽象方法,则不符合函数式接口的规范,这样的接口不能用lambda表达式创建匿名对象。本章内容中所有被lambda表达式实现的接口均为函数式接口。
2.lambda表达式实现无参抽象方法
【例14.1】使用lambda表达式实现打招呼接口(实例位置:资源包\TM\sl\14\1)
3.lambda表达式实现有参抽象方法
抽象方法中有一个或多个参数的函数式接口也是很常见的,lambda表达式中可以用“(a1,a2,a3)”的方法表示有参抽象方法,圆括号里标识符对应抽象方法的参数。如果抽象方法中只有一个参数,lambda表达式则可以省略圆括号。
4.lambda表达式使用代码块
当函数式接口的抽象方法需要实现复杂逻辑而不是返回一个简单的表达式的话,就需要在lambda表达式中使用代码块。lambda表达式会自动判断返回值类型是否符合抽象方法的定义。
14.1.3 lambda表达式调用外部变量
lambda表达式除了可以调用定义好的参数,还可以调用表达式以外的变量。但是,这些外部的变量有些可以被更改,有些则不能。例如,lambda表达式无法更改局部变量的值,但是却可以更改外部类的成员变量(也可以叫作类属性)的值。
1.lambda表达式无法更改局部变量
局部变量在lambda表达式中默认被定义为final(静态)的,也就是说,lambda表达式只能调用局部变量,却不能改变其值。
【例14.4】使用lambda表达式修改局部变量
2.lambda表达式可以更改类成员变量
类成员变量是在lambda表达式中不是被final修饰的,所以lambda表达式可以改变其值。
【例14.5】使用lambda表达式修改类成员变量
14.1.4 lambda表达式与异常处理
很多接口的抽象方法为了保证程序的安全性,会在定义时就抛出异常。但是lambda表达式中并没有抛出异常的语法,这是因为lambda表达式会默认抛出抽象方法原有的异常,当此方法被调用时则需要进行异常处理。
【例14.6】使用lambda表达式实现防沉迷接口
标签:处理,接口,抽象,参数,方法,表达式,lambda From: https://www.cnblogs.com/xiaozhou123456/p/17814415.html