lambda表达式
lambda表达式就是Java8出现的一种语法糖,使代码看起来更简洁。
已经在公司有了较大的应用
参考资料
- Java Lambda 表达式 | 菜鸟教程 (runoob.com)
- 686.尚硅谷_复习:Lambda表达式_哔哩哔哩_bilibili
- Lambda表达式入门_哔哩哔哩_bilibili
- 函数式编程-Stream流(三更草堂) - 掘金 (juejin.cn)
举例
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
// 6. 接受一个 string 对象,并在控制台打印,多条语句用大括号,不返回任何值(看起来像是返回void)
(String s) -> {
System.out.print(s);
System.out.print(s);
}
// 6. 接受一个 string 对象,并在控制台打印,多条语句用大括号,返回s
(String s) -> {
System.out.print(s);
System.out.print(s);
return s;
}
Runnable r1=new Runnable() {
@Override
public void run() {
System.out.println("我爱北京");
}
};
r1.run(); //此处只是体会lambda表达式,正确用法是start()
System.out.println("+++++++++++");
Runnable r2=() -> System.out.println("我爱上海");
r2.run();
函数式接口
lamaba表达式的实质:作为函数式接口的实例,是对象,不是函数
函数式接口: 接口只有一个抽象方法
(注解@FunctionalInterface)
eg
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
- 什么时候使用lambda表达式?
需要对函数式接口实例化的时候。 - 如何使用函数式接口?
在我们需要一个函数式接口的时候,看一下jdk是否已经提供
语法
lambda 表达式的语法格式如下:
(parameters) -> expression 或 (parameters) ->{ statements; }
以下是lambda表达式的重要特征:
- 可选类型声明: 不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号: 一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号: 如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字: 如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
方法引用
格式
类/对象::方法
情况一
对象名::非静态方法
情况二
类名::静态方法
情况三
类名::非静态方法
总结
情况一和情况二:
抽象接口方法的形参和返回值的类型和方法引用的形参和返回值得类型相同
情况三:
函数式接口方法的第一个参数是 方法引用的调用者,第二个参数是方法引用的参数或者无参数时
构造器引用
类名::new
抽象接口方法的形参和返回值的类型和构造器引用的形参和返回值得类型相同
数组引用
数组类型[ ]: :new
抽象接口方法的形参和返回值的类型和数组引用的形参和返回值得类型相同