Lambda表达式
1、Lambda表达式概念
lambda表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看起来更简洁易懂
lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作
lambda可以极大的减少代码冗余,同时代码的可读性要好过冗长的内部类,匿名类
2、特点
函数式编程
参数类型自判断
代码量少,简洁
3、lambda表达式的语法
(参数名)->{代码块};单行可以不加{},多行必须加{}
LambdaParameters -> LambdaBody
args->expr或者(object … args)->{函数式接口抽象方法实现逻辑}
1、()参数的个数,根据函数式接口里面抽象的参数个数来决定,当参数只有一个的时候,()可以省略
2、当expr逻辑非常简单的时候,{}和return可以省略
4、表达式案例
()->{}
()->{System.out.println(1);}
()->System.out.println(1)
()->{return 100;}
()->100
()->null
(int x)->{return x+1;}
(int x)->x+1
(x)->x+1
x->x+1
5、应用场景
任何有函数式接口的地方
函数式接口
1、概念
函数式接口:只有一个抽象方法的接口(Object类中的方法除外),用@FunctionalInterface修饰
2、 jdk1.8提供的函数式接口
supplier 代表一个输出
consumer 代表一个输入
Biconsumer 代表两个输入
function 代表一个输入一个输出
Bifunction 代表两个输入一个输出
UnaryOperator 代表一个输入一个输出 ,输入与输出相同数据类型
BinaryPerator 代表两个输入一个输出, 输入与输出相同数据类型
方法的引用
方法引用是用来直接访问类或者实例已经存在的方法或者构造方法,方法引用提供了一种引用而不执行方法的方式,如果抽象方法的实现恰好可以使用调用另外一个方法来实现,就可能使用方法引用。
方法引用的分类
实现方式 | 对应lambda表达式 | |
---|---|---|
静态方法引用 | 类名:: 方法静态名称 | (参数名)->类名.方法名(参数); |
实例方法引用 | 实例对象:: 方法名称 | (参数名)->对象.方法名(参数名) |
对象方法引用 | 类名:: 方法名称 | (对象,参数名)->类名.方法名(参数名) |
构造方法引用 | 类名:: new | (参数名)->new 类名(参数名) |
使用
静态方法引用:如果函数式接口的实现恰好调用一个静态方法可以实现,就可以使用静态方法引用
实例方法引用:如果函数式接口的实现恰好可以调用一个实例的实例方法来实现,就可以使用实例方法引用
对象方法引用:抽象方法的第一个参数类型恰好是实例方法的类型,抽象方法剩余的参数恰好可以当作实例方法的参数,如果函数式接口的实现能够通过上面说的实例方法来实现的话,就可以使用对象方法引用
构造方法引用:如果函数式接口的实现可以通过使用一个类的构造函数来实现的话,就可以使用构造方法引用