【学习笔记】线程(三)之Lambda表达式
Lambda 表达式
-
-
为了避免匿名内部类定义过多
-
可以让代码看起来很简洁
-
去掉一些没有意义的代码,只留下核心的逻辑
-
-
函数式接口(Functional Interface)
-
定义:任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口
-
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
-
下面我们来一步一步地推导lambda表达式
首先我们定义一个函数式接口
//定义一个函数式接口
interface Ilike{
void lambda();
}
-
通过外部实现类
//1.实现类
class Like implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda1");
}
}
public class TestLambda1 {
public static void main(String[] args) {
Ilike like = new Like();
like.lambda();
}
}
这种方式是在外部写一个类去实现这个函数式接口,然后在主函数中实例化这个类,在调用它地方法
-
静态内部类
public class TestLambda1 {
//静态内部类
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda2");
}
}
public static void main(String[] args) {
Ilike like = new Like2();
like.lambda();
}
}
静态内部类:把这个实现类写在一个类里面,需要用 static 来修饰
-
局部内部类
public class TestLambda1 {
public static void main(String[] args) {
//3.局部内部类
class Like3 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
Ilike like = new Like3();
like.lambda();
}
}
局部内部类:定义在方法里面
-
匿名内部类
public class TestLambda1 {
public static void main(String[] args) {
//4.匿名内部类
Ilike like = new Ilike() {
@Override
public void lambda() {
System.out.println("i like lambda4");
}
};
}
}
匿名内部类:也是定义在方法里面,但是它没有类的名称,必须借助接口或者父类定义
-
lambda表达式
public class TestLambda1 {
public static void main(String[] args) {
Ilike like = null;
//5.Lambda表达式
like = () -> {
System.out.println("i like lambda5");
};
like.lambda();
}
}
只剩下一个方法体,原因是函数式接口只有一个抽象方法,所以lambda表达式中的代码块,就一定是 这个方法的方法体。
下面写一个带参数的lambda 表达式,然后一步一步简化它的格式
-
最原始的状态
public class TestLambda2 {
public static void main(String[] args) {
ILove love = null;
love = (int a) -> {
System.out.println("i love you --->" + a);
};
love.love(520);
}
}
interface ILove{
void love(int a);
}
-
去掉参数类型
public class TestLambda2 {
public static void main(String[] args) {
ILove love = null;
//简化参数类型
love = (a) -> {
System.out.println("i love you --->" + a);
};
love.love(520);
}
}
-
去掉括号
public class TestLambda2 {
public static void main(String[] args) {
ILove love =null;
//简化括号
love = a -> {
System.out.println("i love you --->" + a);
};
love.love(520);
}
}
-
去掉花括号
public class TestLambda2 {
public static void main(String[] args) {
ILove love =null;
//简化花括号
love = a -> System.out.println("i love you --->" + a);
love.love(520);
}
}
总结:简化的要求
-
lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,就用代码块包裹,也就是花括号
-
前提为接口是函数式接口
-
多个参数也可以去掉函数类型,要去掉就都去了,必须加上括号
Runnable 接口就是一个函数式接口,可以使用 lambda 表达式来简化代码
public interface Runnable {
public abstract void run();
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战