理解Functional Interface(函数式接口)是学习lambda表达式的关键所在
函数式接口的定义:
1.任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口
2.对于函数式接口,可以通过lambda表达式创建该接口的对象
package com.jia.lesson;
/*
推导lambda表达式
*/
public class Lambda {
//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();
Like2 like2 = new Like2();
like2.lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
Like3 like3 = new Like3();
like3.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();
}
//2.实现类
static class Like implements ILike {
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
}
package com.jia.lesson;
public class Lambda2 {
public static void main(String[] args) {
//Lambda简化
ILove love1=(int a)->{
System.out.println("i love ni"+a);
};
love1.love(5);
//1.Lambda简化参数类型
love1=(a) -> {
System.out.println("i love ni "+a);
};
love1.love(6);
//2.简化括号
love1=a -> {
System.out.println("i love ni "+a);
};
love1.love(7);
//3.简化花括号
love1=a -> System.out.println("i love ni "+a);
love1.love(8);
//总结:
//lambda表达式只能有一行代码的情况下才能简化成为一行
//必须是函数式接口,只有一个方法
//多个参数也可以去掉参数类型
}
}
interface ILove{
void love(int a);
}