8.0、Java多线程——Lambda表达式
Lambda表达式:
λ希腊字母表中排序第是一位的字母,英文名称为Lambda
避免匿名内部类定义过多
其实质属于函数式编程的概念
我们学习Lambda表达式之前,
先来了解一下什么是 函数式接口:
理解Functional Interface(函数式接口)是学习 Java8 lambda表达式的关键所在。
函数式接口的定义:
任何接口,如果质保函唯一一个抽象方法,那么他就是一个函数式接口,如下所示:
public interface Runnable {
public abstract void run();
}
对于函数式接口,我们可以通过Lambda表达式来创建该接口的对象。
我们先来看看以前是怎么写的,代码如下:
package com.hkl.demo02;
public class TestLambda1 {
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
}
}
//定义一个函数式接口
interface ILike {
void lambda();
}
//实现类
class Like implements ILike {
public void lambda() {
System.out.println("I like lambda~");
}
}
就是先定义一个接口然后创建一个实现类去实现这个接口,然后调用接口
接下里看看我们如何一步步推导得到最后简洁的 Lambda 表达式
第一步:将实现类变成静态内部类,代码如下所示
package com.hkl.demo02;
public class TestLambda1 {
//静态内部类
static class Like implements ILike {
public void lambda() {
System.out.println("I like lambda~");
}
}
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
}
}
//定义一个函数式接口
interface ILike {
void lambda();
}
第二步:将 静态内部类 变成 局部内部类,代码如下
package com.hkl.demo02;
public class TestLambda1 {
public static void main(String[] args) {
class Like implements ILike {
public void lambda() {
System.out.println("I like lambda~");
}
}
Like like = new Like();
like.lambda();
}
}
//定义一个函数式接口
interface ILike {
void lambda();
}
第三步:将 局部内部类 变成 匿名内部类,匿名内部类没有类的名称,必须借助接口或者父类
package com.hkl.demo02;
public class TestLambda1 {
public static void main(String[] args) {
ILike like = new ILike() {
public void lambda() {
System.out.println("i like lambda~");
}
};
like.lambda();
}
}
//定义一个函数式接口
interface ILike {
void lambda();
}
第四步:接下来我们用 lambda 表达式去简化我们的匿名内部类,由于函数接口只有一个方法所以,直接把接口 和 方法名去掉了只保留了方法体,代码如下所示
ILike like = ()->{
System.out.println("i like lambda5~");
};
如果是有参数的情况下还可以继续简化,代码如下所示:
ILike like = (int a)->{
System.out.println("i like lambda5~");
};
//可以将参数类型省略,代码如下:
ILike like = (a)->{
System.out.println("i like lambda5~");
};
//可以将括号也省略掉,代码如下:
ILike like = a->{
System.out.println("i like lambda5~");
};
//如果方法体中代码只有一行,花括号也可以省略,代码如下:
ILike like = a-> System.out.println("i like lambda5~");
有多个参数简化时,必须加上括号 而且 参数类型要么都省略掉类型要么都加上