Java8新特性3-函数式接口和Lambda表达式
1.函数式接口
1.只包含一个方法的接口(有且只有一个方法,并且该方法必须是抽象方法)叫函数式接口;
2.在Java 8中通过@FunctionalInterface注解,将一个接口标注为函数式接口,该接口只能包含一个抽象方法,但是可以有一个或多个默认接口方法和静态方法;
3.函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现;
2.Lambda 表达式
1.Lambda 表达式是一个匿名方法,它是一个函数式接口的具体实现方式;
2.一个函数式接口都可以用Lambda表达式来实现;
3.语法结构:
Lambda表达式语法结构
包含三个部分
public void aa (String s, int a) {
。。。。。
。。。。。
}
(String s, int a) -> {
。。。。。
。。。。。
}
1、一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数;
2、一个固定的箭头符号:->
3、一个方法体,方法体可以是表达式,也可以是代码块,方法体是函数式接口里面方法的具体实现;
总体结构如下:
(parameters) -> expression 或者 (parameters) -> { statements; }
1、括号里的形式参数类型可以省略,编译器会根据上下文来推测参数的类型,你也可以显式地指定参数类型;
2、如果没有形式参数,则括号里空着;
3、方法体,如果有多行功能语句用大括号括起来,如果只有一行功能语句则可以省略大括号,(一般地,如果Lambda的功能语句块比较复杂,我们都用大括号包起来);
4、如果Lambda方法体只有一行return语句,则如果省略了大括号,那么return可以省略;
5、如果参数列表只有一个参数,则参数列表的小括号可以省略;