Lambda表达式
Lambda表达式
lambda表达式是函数式编程的概念
(params) -> expression 表达
(params) -> statement 声明
(params) -> {statements}
Lambda表达式的优点
- 代码看起来更加的简洁
- 去掉冗余代码,留下核心代码
- 避免匿名内部类过多
函数式接口定义:
- 任何接口,如果只包含一个抽象方法,就是一个函数式接口
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
例子:
interface Run{
abstract void run();
}
Lambda表达式简化过程
类的直接实现 -》 静态内部类 -> 局部内部类 -》 匿名内部类 -》lambda表达式
lambda多个传参
sports = (a,b) -> {
System.out.println(a);
System.out.println(b);
};
简化完整代码
public class Lambda01 {
public static void main(String[] args) {
Run1 run1 = new Run1();
run1.run();
//局部内部类
class Run2 implements Run{
@Override
public void run() {
System.out.println("run2");
}
}
Run2 run2 = new Run2();
run2.run();
//匿名内部类,没有类名称,所以需要从接口或者父类获取
Run run3 = new Run() {
@Override
public void run() {
System.out.println("run3");
}
};
run3.run();
//lambda表达式
Run run4 = () -> {
System.out.println("run4");
};
run4.run();
}
//静态内部类
static class Run1 implements Run{
@Override
public void run() {
System.out.println("run1");
}
}
}
interface Run{
abstract void run();
}
lambda完整代码
package com.hdt.kuangshen.lamda;
public class LambdaDemo {
public static void main(String[] args) {
Sports sports = null;
// 匿名内部类
sports = new Sports() {
@Override
public void run(int a) {
System.out.println("我是匿名内部类");
}
};
// lambda简化1,使用在多行输出
sports = (a) -> {
System.out.println("lambda第一行");
System.out.println("lambda第二行");
};
// lambda简化2,多行输出
sports = a -> {
System.out.println("lambda第一行");
System.out.println("lambda第二行");
};
// lambda简化3
sports = a -> System.out.println("lambda简化到最简了");
sports.run(2);
}
}
interface Sports{
void run(int a);
}