初识
(看完肯定会有帮助)
理解Functional Interface(函数式接口)是学习lambda表达式的关键
函数式接口的定义:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
对于函数式接口,可以通过lambda表达式来创建该接口的对象
演化过程:
一般我们定义接口、实例化接口方法,程序调用接口方法完成操作
代码如下:
public class TestLambda {
//测试方法
public static void main(String[] args) {
ServiceI server = null;
//1、接口方法
server = new ServiceImpl();
server.lambda(1);
}
}
/**
* 定义接口
*/
interface ServiceI{
void lambda(int i);
}
/**
* 接口实现类
*/
class ServiceImpl implements ServiceI{
@Override
public void lambda(int i) {
System.out.println("定义接口,参数:"+i);
}
}
上面这种类型可写成 静态内部类
public class TestLambda {
static class ServiceImpl1 implements ServiceI{
@Override
public void lambda(int i) {
System.out.println("静态内部类,参数:"+i);
}
}
//测试方法
public static void main(String[] args) {
ServiceI server = null;
server = new ServiceImpl1();
server.lambda(2);
}
}
可继续写成匿名内部类方式
public class TestLambda {
//测试方法
public static void main(String[] args) {
ServiceI server = null;
server = new ServiceI() {
@Override
public void lambda(int i) {
System.out.println("匿名内部类,参数:"+i);
}
};
server.lambda(3);
}
}
省略接口实例化代码即变为lambda表达式
public class TestLambda {
//测试方法
public static void main(String[] args) {
ServiceI server = null;
server = (int i) -> {
System.out.println("lambda表达式,参数:"+i);
};
server.lambda(4);
}
}
到此步骤即可对lambda表达式演化过程初步了解
还可有一些简化,比如:
只有一句业务代码时可省略大括号
server = (int i) -> System.out.println("lambda表达式,参数:"+i);
可省略所有参数类型
server = (i,j) -> System.out.println("lambda表达式,参数:"+i+j);
参数只有一个时可省略参数括号参数类型
server = i -> System.out.println("lambda表达式,参数:"+i);