一、Lambda概述
lambda表示数学符号“λ”,计算机领域中λ代表“λ演算”,表达了计算机中最基本的概念:“调用”和“置换”。
二、为什么使用Lambda
1、Java语言是面向对象的语言,不能像函数式语言那样嵌套定义方法。
2、Java的匿名内部类只能存在于创建它的线程,不能运行在多线程中,无法充分利用多核的硬件优势。
3、匿名内部类的确定还有:
(1)语法相对复杂。
(2)在调用内部类的上下文中,指引和this的指代容易混淆。
(3)类加载和实例创建语法不可避免。
(4)不能引用外部的非final对象。
(5)不能抽象化控制流程。
三、Lambda语法
1、参数列表"(...)"
2、箭头符号“->”
3、代码块"{...}"
四、Lambda案例一
用lambda简化Runnable接口的实现方式。
package jax.lambda;
public class LambdaTest {
public static void main(String[] args) {
int i=0;
new Runnable(){
@Override
public void run() {
//i++; //不能直接修改外部的值,i必须为final才能编译通过
System.out.println("匿名内部类实现Runnable接口,i="+i);
}}.run();
int j=0;
Runnable r=()->{
//j++; //不能直接修改外部的值,j必须为final才能编译通过
System.out.println("使用Lambda实现Runnable接口,j="+j);
};
r.run();
}
}
输出:
匿名内部类实现Runnable接口,i=0
使用Lambda实现Runnable接口,j=0
五、Lambda案例二
用lambda实现自定义接口,模拟登陆操作。
package jax.lambda;
public class CustomLambdaTest {
static interface Action{
void execute(String content);
}
public static void main(String[] args) {
new Action(){
@Override
public void execute(String content) {
System.out.println(content);
}}.execute("匿名内部类实现方式,执行登陆操作");
Action login=(String content)->{
System.out.println(content);
};
login.execute("lambda实现方式,执行登陆操作");
}
}
输出:
匿名内部类实现方式,执行登陆操作
lambda实现方式,执行登陆操作