读书笔记05——Java 8 实战——(第三章:Lambda 表达式)
Lambda 函数特点
匿名——是因为它不像普通的方法那样有一个明确的名称:写的少而想的多!
函数——是因为它不像普通方法那样属于某个特定类,但和方法一样,Lambda 有参数列表、函数主体、返回类型、还可能抛出异常的列表。
传递——Lambda 函数可以作为参数传递给方法或存储在变量中。
简洁——无需像匿名类那样写很多模板代码。
Lambda示例
Lambda 一般使用在 函数式接口(就是定义一个抽象方法的接口)上使用。
函数式接口的抽象方法的签名称为函数描述符。
java.util.function 包中 引入的几个 Predicate 、Consumer、 Function ...
- Predicate<T> 定义了个 test 的抽象方法,接受泛型对象,返回一个 boolean 值。
- Consumer<T> 定义了个 accept 的抽象方法,他接受泛型 T 对象,没有返回(void)
- Function<T,R> 定义了 apply 的方法,接受一个泛型 T 的对象,并返回一个泛型 R 的对象。
一般来说,针对专门的输入参数类型的函数是接口的名称都要加上对应的原始类型前缀,比如 DoublePredicate、IntConsumer、LongBinaryOperator、IntFunction 等。Function 接口还有针对输出参数类型的变种:ToIntFunction<T>、IntToDoubleFunction 等
Lambda 的检查过程