声明
以下笔记均来自笔者在学习尚硅谷课程的笔记。想仔细学习的建议观看尚硅谷的视频
Lambda表达式
什么是Lambda表达式
Lambda表达式是一种匿名函数,它没有名称,但具有参数列表、函数体和可能的异常列表。
Lambda表达式的本质是作为函数式接口的实例。
Lambda表达式有什么优点
使代码更加简洁,提高代码的可读性
Lambda表达式的语法规则
左边括号()作为形参列表,类型推断:可以省略形参的类型参数。
->把()和方法体隔开
右边是方法体。
语法格式:如果左边只有一个·参数可以省略括号。如果右边只有一条语句或者只是一条return则可以省略{}或者省略return
默认方法
接口里面可以有实现方法,加上 default关键字
函数式接口
如果一个接口只有一个抽象方法则是函数式接口
四大核心函数式接口
消费型接口
Consumer<T> 方法 void accept(T t)
供给型接口
Supplier<T> T get()
函数型接口
Function<T> 返回R类型的对象 R apply(T t)
判断型接口
Predicate<T> boolean test(T t)确定类型为T的对象是否满足约束
其他接口
方法引用
方法引用是一种更简洁的lambda表达式,用于调用已经存在的方法。它的语法格式如下:
- 静态方法引用:
ClassName::staticMethodName
类::静态方法 - 实例方法引用:
object::instanceMethodName
对象::实例方法 - 类::非静态·方法
方法引用可以使代码更加简洁,易读易懂,减少了冗余代码的出现,提高了代码的可维护性和可读性。在Java 8中,方法引用可以应用于各种场景,包括对集合的操作、事件处理、GUI编程等。
构造器引用和数组引用
构造器引用
构造器引用的语法规则如下:
ClassName::new
其中,ClassName
是要调用的构造函数所属的类的名称。例如,要调用String
类的构造函数创建一个空字符串,可以使用以下语法:
Supplier<String> supplier = String::new;
String str = supplier.get();
数组引用
数组引用是一种方法引用,用于调用已经存在的数组的方法。它的语法规则如下:
TypeName[]::methodName
其中,TypeName
是要调用的方法所属的数组类型的名称,methodName
是要引用的方法的名称。
例如,要引用Arrays
类的sort(int[] a)
方法对一个整数数组进行排序,可以使用以下语法:
int[] arr = {3, 2, 1};
Arrays.sort(arr);
要使用数组引用来完成同样的操作,可以使用以下语法:
int[] arr = {3, 2, 1};
IntConsumer intConsumer = Arrays::sort;
intConsumer.accept(arr);
这个例子中,IntConsumer
是一个函数式接口,用于接受一个int[]
类型的参数,并执行某个操作。Arrays::sort
引用了Arrays
类的sort
方法,它等价于以下的lambda表达式:
IntConsumer intConsumer = arr -> Arrays.sort(arr);
数组引用可以使代码更加简洁,易读易懂,减少了冗余代码的出现,提高了代码的可维护性和可读性。