可以称作闭包,是java8的重要特性
lambda允许把函数当做一个方法的参数,使代码简洁紧凑
前提:必须是函数式接口才能使用lambda表达式
函数式接口:任何接口,只包含一个抽象方法
//推导lambda表达式1
public class TestLambda{
public static void main(String[] args){
ILike like=new Like();
like.lambda();
}
}
//定义一盒函数式接口
interface ILike{
void lambda();
}
//实现类
class Like implements ILike{
@override
public void lambda(){System.out.println("我喜欢lambda")}
}
静态内部类:顾名思义
//推导lambda表达式2
public class TestLambda{
//实现类挪到类里变成静态内部类
static class Like implements ILike{
@override
public void lambda(){System.out.println("我喜欢lambda")}
}
public static void main(String[] args){
ILike like=new Like();
like.lambda();
}
}
//定义一盒函数式接口
interface ILike{
void lambda();
}
局部内部类:放在方法里的类
//推导lambda表达式3
public class TestLambda{
public static void main(String[] args){
ILike like=new Like();
like.lambda();
//实现类→静态内部类→局部内部类
class Like implements ILike{
@override
public void lambda(){System.out.println("我喜欢lambda")}
}
}
}
//定义一盒函数式接口
interface ILike{
void lambda();
}
匿名内部类:没有类名,必须借助接口或父类
//推导lambda表达式4
public class TestLambda{
public static void main(String[] args){
//实现类→静态内部类→局部内部类→匿名内部类
like=new ILike(){
@override
public void lambda(){System.out.println("我喜欢lambda")}
}
like.lambda();
}
}
//定义一盒函数式接口
interface ILike{
void lambda();
}
lambda:不要接口名,也不要方法名,只写方法体
//推导lambda表达式5
public class TestLambda{
public static void main(String[] args){
//实现类→静态内部类→局部内部类→匿名内部类→lambda
like=()→{System.out.println("我喜欢lambda")};
like.lambda();
}
}
//定义一盒函数式接口
interface ILike{
void lambda();
}
带参数的lambda:a就是参数,参数类型可以去掉,一去掉就都去掉,多参数必须加括号
简化成3的前提:方法体只有一行



