一、Lambda表达式概念
从本质来讲,是一个匿名函数。可以使用这个匿名函数,实现接口中的方法,对接口进行非常简洁的实现。
1、函数式接口
如果说一个接口中,要求实现必须实现的抽象方法,有且只有一个。这样的接口,就是函数式接口。
2、@FunctionalInterface
用在接口之前,判断这个接口是否是一个函数式接口。
3、lambda表达式语法
public class BasicSyntax {
public static void main(String[] args) {
// 1、无参无返回值
NoneReturnNoneParameter lambda1 = () -> {
System.out.println("无参无返回值");
};
lambda1.test();
// 2、一个参数无返回值
NoneReturnOneParameter lambda2 = a -> System.out.println(a);
lambda2.test("ooooo");
// 3、多个参数无返回值
NoneReturnMutipleParameter lambda3 = (a, b) -> {
System.out.println(a + b);
};
lambda3.test(1, 2);
//4、有参数有返回值
OneReturnMutipleParameter lambda4 = (a, b) -> a + b;
int test = lambda4.test(10, 20);
System.out.println(test);
}
}
4、lambda表达式的精简
(1)参数的类型可以省略
(2)如果只有一个参数,参数的小括号可以省略
(3)函数体只有一行且没有返回值,大括号可以省略
(4)函数体只有一行且是返回值,大括号和return都可以省略
5、函数引用
(1)静态方法的引用
类 ::静态方法
public class Lambda1 {
private static interface Calculate {
int calculate(int a, int b);
}
// 函数引用
public static void main(String[] args) {
//Calculate calculate = (x,y) -> calculate(x,y);
Calculate calculate = Lambda1::calculate;
}
private static int calculate(int x, int y) {
return x + y;
}
}
(2)非静态方法引用
对象::非静态方法
public class Lambda2 {
private static interface Calculate {
int calculate(int a, int b);
}
// 函数引用
public static void main(String[] args) {
Calculate calculate = new Lambda2()::calculate;
//Calculate calculate = (x,y) -> calculate(x,y);
}
private int calculate(int x, int y) {
return x + y;
}
}
(3)构造方法引用
类名::new
public class Lambda3 {
private static class Person{}
@FunctionalInterface
protected interface GetPerson{
Person get();
}
public static void main(String[] args) {
// GetPerson getPerson = () -> new Person();
GetPerson getPerson = Person::new;
}
}
注:笔记整理于B站前锋大数据学习营 lambda表达式课程,致谢!
本文详细介绍了Java中的Lambda表达式,包括其概念、函数式接口、@FunctionalInterface注解、不同类型的lambda表达式语法以及如何进行简化。此外,还讲解了函数引用的三种形式:静态方法引用、非静态方法引用和构造方法引用。通过实例展示了Lambda表达式在实际代码中的应用,帮助读者更好地理解和运用这一功能。
1061

被折叠的 条评论
为什么被折叠?



