在JDK8中加入了Lambda表达式,使用函数接口编程。是一个匿名函数,即没有函数名的函数。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。,使用它设计的代码会更加简洁。使用Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读。
需要注意的是只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
以下是lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
比如:
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
关于更多的Lambda表达式如何让使用这里就不做过多介绍,可以参考菜鸟编程。
下面来说说Function接口。
在JDK8中共提供43个现有的函数接口,可以满足基本的开发需要,如果需要特别的函数接口可以自定义,使用@FunctionalInterface注解。
总共分为6大类:
- Function:(函数)代表其参数与返回类型不一致的函数(17个接口)。Lambda中Function函数接口(二)——Function系列接口
- UnaryOperator:(一元操作)表示结果和参数类型一致的函数(4个)。Lambda中Function函数接口(三)——Operator系列接口
- BinaryOperator:(二元操作)表示结果和参数类型一致的函数(4个)。Lambda中Function函数接口(三)——Operator系列接口
- Predicate:(断言)该接口代表传入一个参数并返回boolean的函数(5个)。Lambda中Function函数接口(四)——Predicate系列接口
- Supplier:(供应者)表示没有输入参数,但返回一个值(5个)。Lambda中Function函数接口(五)——Supplier系列接口
- Consumer:(消费者)表示传入一个参数,但不返回任何值(8个)。Lambda中Function函数接口(六)——Consumer系列接口
Function | UnaryOperator | BinaryOperator | Predicate | Supplier | Consumer |
BiFunction | IntUnaryOperator | IntBinaryOperator | BiPredicate | IntSupplier | BiConsumer |
IntFunction | LongUnaryOperator | LongBinaryOperator | IntPredicate | LongSupplier | IntConsumer |
LongFunction | DoubleUnaryOperator | DoubleBinaryOperator | LongPredicate | DoubleSupplier | LongConsumer |
DoubleFunction |
| DoublePredicate | BooleanSupplier | DoubleConsumer | |
IntToLongFunction |
|
|
| ObjIntConsumer | |
IntToDoubleFunction |
|
|
| ObjLongConsumer | |
LongToIntFunction |
|
|
| ObjDoubleConsumer | |
LongToDoubleFunction |
|
|
|
| |
DoubleToIntFunction |
|
|
|
| |
DoubleToLongFunction |
|
|
|
| |
ToIntFunction |
|
|
|
| |
ToIntBiFunction |
|
|
|
| |
ToLongFunction |
|
|
|
| |
ToLongBiFunction |
|
|
|
| |
ToDoubleFunction |
|
|
|
| |
ToDoubleBiFunction |
|
|
|
|