java Lambda表达式
λ是希腊字母中排序第十一位的字母,lambda表达式可以避免匿名内部类定义过多 ,只留下核心的逻辑,使代码看上去更简洁,其实质属于函数式编程。
函数式接口:只包含唯一一个抽象方法的接口
例如:
interface Runnable{
void runnable();
}
对于函数式接口,可以通过lambda表达式来创建该接口的对象
推导lambda表达式:
package com.yuanyu.thread;
//推导lambda表达式
public class Demo02 {
public static void main(String[] args) {
class Like implements ILike{
@Override
public void like() {
System.out.println("I like you verymuch3");
}
}
ILike iLike =new Like();
ILike iLike2 =null;
iLike.like();
//匿名内部类(右边的类改成接口,重写方法)
ILike iLike1 =new ILike() {
@Override
public void like() {
System.out.println("I like you verymuch4");
}
};
iLike1.like();
//lambda简化
iLike2=() ->{
System.out.println("I like you verymuch5");
};
iLike2.like();
}
//静态内部类
static class Like implements ILike{
@Override
public void like() {
System.out.println("I like you verymuch2");
}
}
}
//定义一个函数式接口
interface ILike{
void like();
}
//定义一个实现类 外部类
class Like implements ILike{
@Override
public void like() {
System.out.println("I like you verymuch1");
}
}
程序运行结果:
I like you verymuch3.
I like you verymuch4.
I like you verymuch5.
lambda表达式的简化:
package com.yuanyu.thread;
public class TestLambda {
public static void main(String[] args) {
ILove iLove=null;
// ILove iLove=(int a,int b) ->{
// System.out.println("I love you->"+a);
// };
//
// iLove=(a,b) ->{ //lambda表达式简化,去掉参数类型
// System.out.println("I love you->"+a);
// };
//
// iLove=(a,b)->{ //lambda表达式简化,去掉括号
// System.out.println("I love you->"+a);
// };
iLove=(a,b)->System.out.println("I love you->"+a+b);//lambda表达式简化,去掉花括号 lambda表达式只有一行才能这样
//若有多个参数 去掉参数类型时 需要都去掉 并加上括号
iLove.love(520,1314);
}
}
interface ILove{
void love(int a,int b);
}
程序运行结果:
I love you->5201314
若Runnable接口实现的方法简单,也可以使用lambda表达式: