一、java8新特性
1、java8新特性
二、lambda表达式
1、使用举例
2、lambda表达式语法的使用1
(1)举例:(o1,o2) -> Integer.compare(o1,o2);
(2)格式:
->:lambda操作符或箭头操作符
->左边:lambda形参列表 (其实就是接口中的抽象方法的形参列表)
->右边:lambda体 (其实就是重写的抽象方法的方法体)
(3)lambda表达式的使用:(分为6种情况去介绍)
a、无参、无返回值
b、需要一个参数,但是没有返回值
c、数据类型可以省略,因为可由编译器推断得出,称为“类型推断”
d、lambda若只需要一个参数是,参数的小括号可以省略
e、lambda若是需要两个或者以上的参数,多条执行语句,并且可以有返回值
f、当lambda体只有一条语句时,return与大括号若有,都可以省略(return和{}都省略)
总结:
->左边: lambda形参列表的参数类型可以省略(类型推断),如果lambda参数列表只有一个参数,则()也可以省略;
->右边:lambda体应该使用一对大括号包裹;如果lambda体只有一条执行语句(可能是return语句),可以省略这一对大括号,以及return关键字
(4)lambda表达式的本质:作为函数式接口的实例
三、函数式接口:只包含一个抽象方法的接口
1、基本的四大接口:
eg1:消费型接口:
eg2:
根据给定的规则,过滤结合中的字符串.此规则由Predicate(Predicate是一个函数式接口,只有一个抽象方法)的方法决定
2、函数时接口:其他接口
三、方法引用和构造器引用
1、方法引用的使用情况
(1)使用情境:当要传递给lambda体的操作,已经有实现的方法了,可以使用方法引用
(2)方法引用本质上就是lambda表达式,而lambda表达式作为函数式接口的实例,所以方法引用,也是函数式接口的实例
(3)使用格式:类(或对象) :: 方法名
(4)具体分为如下的三种情况:
a、对象 :: 非静态方法
eg2:
b、类 :: 静态方法
eg2:
c、类 :: 非静态方法(实例方法)
eg2:
eg3:
(5)说明:方法引用的使用要求:要求接口中的抽象方法,他的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型相同(针对于上述的a和b,c中有一些但是比较少)
2、构造器引用和数组引用
(1)构造器引用:和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致,抽象方法的返回值类型即为构造器所属的类的类型
Employee的空参构造器:Employee()
eg1:
eg2:
eg3:
(2)数组引用 :可以把数组看作是一个特殊的类,则写法与构造器引用一致