Lambda表达式
1、Lambda表达式使用的前提
Lambda表达式的语法式非常简洁的,但是Lambda表达式不是随随便便使用的,使用时有一个条件要特别注意:
1、方法的参数或局部变量类型必须为接口才能使用Lambda。
2、接口有且仅有一个抽象方法(@Functionallnterface:唯一抽象方法的类注解)。
小提示:Lambda表达式项目中常用于Stream流中。
2、Lambda表达式的语法
Lambda省去了面向对象的条条框框,Lambda的标准格式由三部分组成:
(参数列表)->{}
():参数列表
->:连接符 连接的是参数以及方法体。
{}:方法体
例子:
3、Lambda表达式的省略写法
在Lambda表达式的标准写法基础上,可以使用省略写法的规则为:
1、小括号内的参数类型可以省略[]
2、如果小括号内有且仅有一个参数,则小括号可以省略。
3、如果大括号内有且仅有一个语句,可以 同时省略大括号、return关键字及语句分号。
内置函数式接口
1、四种jdk内置的函数式接口
我们知道使用Lambda表达式的前提是需要有函数式接口,而Lambda表达式使用时不关心接口名,抽象方法名。只关心抽象方法的参数列表和返回值类型。因此为了让我们使用Lambda表达式更加的方便 ,在JDK中提供您了大量常用的函数式接口,大多数无需自己再定义函数式接口,而可以直接使用jdk内置的函数式接口。分为四类。
2、使用场景
1、消费型函数式接口Consumer
适合有参数,但是没有返回值的。
2、供给型函数式接口Supplier
无参,需要返回值的接口类
3、函数型函数式接口Function<T,K>
T:参数的泛型 K:返回值的泛型
4、断言型函数式接口Predicate<T>
T:参数的泛型 boolean:返回值类型
方法引用
特殊的Lambda表达式,它是对Lambda表达式的一种简写方式。
1、四种类型的方法引用
<1>静态方法引用:
类名::静态方法
Lambda表达式:
(参数)->类名.静态方法(参数)
当Lambda表达式中方法体,只有一条语句,而这条语句是类名.静态方法。而静态发方法的参数和Lambda的参数一致时。
举例:
<2>实例方法引用:
对象::实例方法
Lambda表达式:
(参数)->对象.实例方法(参数)
实例方法引用,顾名思义就是调用已经存在的实例的方法,与静态方法引用不同的是类要先实例化,静态方法引用类无需实例化,直接用类 名去调用。
举例:
<3>对象方法引用:
类名::实例方法
Lambda表达式:
(参数1,参数2...)->参数1.实例方法(参数2...)
若Lambda参数列表中的第一个参数是实例方法的参数调用者,而第二个参数是实例方法的参数时,可以使用对象方法引用。
<4>构造方法引用:
类名::new
Lambda表达式:
(参数)->new 类名(参数);