java多线程学习笔记四——Lambda表达式
Lambda表达式
为什么使用Lambda表达式
- 避免匿名内部类定义过多
- 可以让你的代码看起来简洁
- 去掉了一堆没有意义的代码,只留下核心的逻辑
也许你会说,Lambda表达式不仅不简洁,还看起来更乱。那是因为还没有用习惯,习惯了,Lambda表达式则会看起来很简洁
要理解Lambda表达式,首先要理解Functional Interface(函数式接口)是学习java8 lambda表达式的关键所在。
函数式接口的定义:
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。比如:
public interface Runnable(){
public abstract void run();
}
- 对于函数式接口,我们可以通过lambda表达式来创建该接口对象
函数式接口实现的简化过程
创建外部类实现接口
代码如下:
package com.Thread;
/*
推导lambda表达式
*/
public class Testlambda1 {
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//2.外部实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda1");
}
}
运行结果:

从以上代码中,我们定义了外部类实现了函数式接口,但为了方便,我们将实现类定义类里面。
创建静态内部类实现接口
package com.Thread;
/*
推导lambda表达式
*/
public class Testlambda1 {
//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();
like = new Like2();
like.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//2.外部实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda1");
}
}
运行结果:

以上代码中,我们通过定义静态内部类,为了更加简便,我们可以定义局部内部类。
创建局部静态类实现接口
package com.Thread;
/*
推导lambda表达式
*/
public class Testlambda1 {
//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();
like = new Like2();
like.lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda3");
}
}
like = new Like3();
like.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//外部实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda1");
}
}
运行结果:

以上我们就定义了局部内部类,而为了更简化实现方式,我们还可以使用匿名内部类
匿名内部类
package com.Thread;
/*
推导lambda表达式
*/
public class Testlambda1 {
//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();
like = new Like2();
like.lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda3");
}
}
like = new Like3();
like.lambda();
//5.匿名内部类,没有类的名称,必须借助接口或者父类
like = new ILike() {
@Override
public void lambda() {
System.out.println("I like lambda4");
}
};
like.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//外部实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda1");
}
}
运行结果:

为了更进一步简化,下面就是使用lambda表达式实现函数式接口的方式
lambda表达式实现接口
package com.Thread;
/*
推导lambda表达式
*/
public class Testlambda1 {
//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();
like = new Like2();
like.lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda3");
}
}
like = new Like3();
like.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();
}
//外部实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda1");
}
}
运行结果:

浙公网安备 33010602011771号