一、JDK8新特性:Lambda表达式
1.Lambda表达式及其使用举例
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
Comparator<Integer> com1 =new Comparator<Integer>(){
@Override
public int compare(Integer o1,Integer o2){
return Integer.compare(o1,o2);
}
};
Comparator<Integer>com2 = (Integer o1,Integer o2)->{
return Integer.compare(o1,o2);
};
(1)lambda表达式使用:
->:lambda操作符或箭头操作符
->的左边:lambda形参列表,对应着要重写的接口中的抽象方法的形参列表,由一对小括号表示
->的右边:lambda体,对应着接口的实现类要重写的方法的方法体,由一对中括号表示
形参列表中的数据类型可以省略,因为可由编译器推断得出,称为"类型推断"
lambda表达式若只需要一个参数时形参列表的小括号可以省略
lambda体只有一条语句时return与大括号都可以省略,两个需要同时省略
(2)lambda表达式的本质:
a.lambda表达式作为接口的实现类的对象;
b.lambda表达式是一个匿名函数
2.函数式接口:
(1)概念:如果接口中只声明一个抽象方法,则此接口称为函数式接口;因为只有给函数式接口提供实现类的对象时才可以使用lambda表达式;
(2)API中函数式接口所在的包:java.util.function
(3)4个基本的函数式接口
(4)消费型接口:有形参,但是返回值为void
(5)供给型接口:无形参,有返回值
(6)函数型接口:既有参数也有返回值
(7)判断型接口:有形参,返回值是boolean的结果
3.Lambda表达式的语法规则:
->:lambda操作符或箭头操作符
1.->的左边:lambda形参列表,对应着要重写的接口中的抽象方法的形参列表,由一对小括号表示
参数的类型都可以省略;如果形参只有一个则一对()也可以省略;
2.->的右边:lambda体,对应着接口的实现类要重写的方法的方法体,由一对{}表示
如果方法体中只有一条执行语句则{}可以省略;如果有return关键字则必须一并省略;