Lambda表达式
Lambda表达式
-
λ希腊字母表中排序第十一位的字母, 英语名称为Lambda
-
避免匿名内部类定义过多
-
其实质属于函数式编程的概念
Function Interface(函数式接口)
理解Functional Interface (函数式接口)是学习Java8 lambda表达式的关键所在。
函数式接口的定义:
任何接口,如果只包含唯一个抽象方法,那么它就是一个函数式接口。
public interface Runnable {
public abstract void run();
}
对于函数式接口, 我们可以通过lambda表达式来创建该接口的对象。
//推导Lambda表达式
public class TestLambda {
//3.静态内部类
static class Like2 implements ILIke {
@Override
public void lambda() {
System.out.println("I like Lambda2!");
}
}
public static void main(String[] args) {
ILIke like = new Like();
like.lambda();
Like2 like2 = new Like2();
like2.lambda();
//4.局部内部类
class Like3 implements ILIke {
@Override
public void lambda() {
System.out.println("I like Lambda3!");
}
}
Like3 like3 = new Like3();
like3.lambda();
//5.匿名内部类,没有类的名称,必须借助接口或者父类
like = new ILIke() {
@Override
public void lambda() {
System.out.println("I like Lambda4!");
}
};
like.lambda();
//6.用Lambda简化
like = () -> {
System.out.println("I like Lambda5!");
};
like.lambda();
}
}
//1.定义一个函数式接口 只包含一个方法
interface ILIke {
void lambda();
}
//2.接口实现类
class Like implements ILIke {
@Override
public void lambda() {
System.out.println("I like Lambda!");
}
}
为什么要使用lambda表达式
- 避免匿名内部类定义过多
- 可以让你的代码看起来很简洁
- 去掉了一堆没有意义的代码,只留下核心的逻辑。
Lambda表达式简化
public class TestLambda2 {
public static void main(String[] args) {
Love love = null;
love = (int a) -> {
System.out.println("I love you " + a);
};
love.Lambda(1);
//简化1:参数类型
love = (a) -> {
System.out.println("I love you " + a);
};
love.Lambda(2);
//简化2:简化括号
love = a-> System.out.println("I love you " + a);
love.Lambda(5);
}
}
interface Love {
void Lambda(int a);
}
总结:
使用Lambda表达式的前提是接口只能为函数式接口
Lambda表达式如果只有一行代码则可以去掉花括号,如果有多行代码,则必须使用代码块包裹(花括号)
Lambda表达式的参数类型可以省略,如果有多个参数,要省略必须一起省略,而且得用括号包裹

浙公网安备 33010602011771号