什么是Lambda表达式?
Lambda表达式也被称为箭头函数、匿名函数、闭包
Lambda表达式体现的是轻量级函数式编程思想
'->'符号式Lambda表达式核心操作符号,符号左侧是操作参数,符号右侧是操作表达式
JDK8新特性
函数式接口
函数式接口,就是Java类型系统中的接口。函数式接口,是只包含一个接口方法的特殊接口。语义化检测注解:@FunctionalInterface
函数式接口,只包含一个操作方法。Lambda表达式,只能操作一个方法,Java中的Lambda表达式,核心就是一个函数式接口的实现。
Java类型系统内建函数式接口
java.util.function.Function<T,R>
接收参数对象T,返回结果对象R
java.util.function.Supplier<T>
不接受参数,提供T对象的创建工厂
lambda表达式的基本语法
1)声明:就是和lambda表达式绑定的接口类型
2)参数:包含在一堆圆括号中,和绑定的接口中的抽象方法中的参数个数及顺序一致。
3)操作符:->
4) 执行代码块:包含在一对大括号中,出现在操作符号的右侧。
[接口声明]=(参数)->{执行代码块};
代码实例
参考菜鸟教程:https://www.runoob.com/java/java8-lambda-expressions.html
public class Java8Tester {
public static void main(String args[]){
Java8Tester tester = new Java8Tester();
// 类型声明
MathOperation addition = (int a, int b) -> a + b;
// 不用类型声明
MathOperation subtraction = (a, b) -> a - b;
// 大括号中的返回语句
MathOperation multiplication = (int a, int b) -> { return a * b; };
// 没有大括号及返回语句
MathOperation division = (int a, int b) -> a / b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + tester.operate(10, 5, division));
// 不用括号
GreetingService greetService1 = message ->
System.out.println("Hello " + message);
// 用括号
GreetingService greetService2 = (message) ->
System.out.println("Hello " + message);
greetService1.sayMessage("Runoob");
greetService2.sayMessage("Google");
}
interface MathOperation {
int operation(int a, int b);
}
interface GreetingService {
void sayMessage(String message);
}
private int operate(int a, int b, MathOperation mathOperation){
return mathOperation.operation(a, b);
}
}
总结
1.lambda表达式,必须和接口进行绑定。
2.lambda表达式的参数,可以附带0个到n个参数,括号中的参数类型可以不用指定,jvm在运行时,会自动根据绑定的抽象方法中的参数进行推导
3.lambda表达式的返回值,如果代码块只要一行,并且没有大括号,不用写return关键字,单行代码的执行结果,会自动返回。如果添加了大括号,或者有多行代码,必须通过return关键字返回执行结果。