lambda 表达式的语法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
特性
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
函数接口
一般使用注解@FunctionalInterface修饰
在Java 8中,把那些仅有一个抽象方法的接口称为函数式接口。如果一个接口被@FunctionalInterface注解标注,表示这个接口被设计成函数式接口,只能有一个抽象方法
java8自带的常用函数式接口
函数接口 | 抽象方法 | 功能 | 参数 | 返回类型 |
---|---|---|---|---|
Predicate | test(T t) | T | boolean | 判断真假 |
Function | R apply(T t) | T | R | 将T映射为R(转换功能) |
Consumer | accept(T t) | T | void | 消费消息 |
Supplier | T get() | None | T | 生产消息 |
UnaryOperator | T apply(T t) | T | T | 逻辑非(!) |
BinaryOperator | apply(T t, U u) | (T,T) | (T) | 求两个数的乘积(*) |
使用代码示例
@Test
public void testLambda() {
Predicate<Integer> predicate = x -> x < 5;
System.out.println(predicate.test(4));
Function<Integer, String> function = x -> "我是function测试" + x;
System.out.println(function.apply(3));
Consumer<String> consumer = System.out::println;
consumer.accept("我是consumer测试");
Supplier<String> supplier = () -> new String("我是supplier测试");
System.out.println(supplier.get());
UnaryOperator<Boolean> unaryOperator = x -> !x;
System.out.println(unaryOperator.apply(true));
BinaryOperator<Integer> binaryOperator = (x, y) -> x * y;
System.out.println(binaryOperator.apply(2, 3));
}
结果
stream相关详见:https://blog.csdn.net/sinat_35757488/article/details/94379891