Java8_表达式语法
语法
Lambda 表达式在Java 语言中引入了一个新的语法元 素和操作符。这个操作符为 “->” , 该操作符被称 为 Lambda 操作符或剪头操作符。它将 Lambda 分为 两个部分:
左侧:指定了 Lambda 表达式需要的所有参数
右侧:指定了 Lambda 体,即 Lambda 表达式要执行 的功能。
语法格式
语法格式一:无参,无返回值,Lambda体只需一条语句
旧写法:
Runnable runnable = new Runnable() {
int num = 0; //jdk 1.7 前,必须是 final
@Override
public void run() {
System.out.println("Hello world " + num);
}
};
runnable.run();
lamda表达式:
Runnabler1=()->System.out.println("Hel1o Lambda!");
语法格式二:Lambda需要一个参数
Consumer<String>fun=(args)->System.out.println(args);
语法格式三:Lambda只需要一个参数时,参数的小括号可以省略
Consumer<String>fun=args->System.out.printin(args);
语法格式四:Lambda需要两个参数,并且有返回值
BinaryOperator<Long>bo=(x,y)->{
System.out.print1n("实现函数接口方法!");
return x+y;
};
语法格式五:当Lambda体只有一条语句时,return与大括号可以省略
BinaryOperator<Long>bo=(x,y)->x+y;
语法格式六:数据类型可以省略,因为可由编称为“类型推断”
BinaryOperator<Long>bo=(Longlx,|Longly)->{
System.out.print1n("实现函敷接口方法!);
returnx+y;
}
类型推断
上述 Lambda 表达式中的参数类型都是由编译器推断 得出的。Lambda 表达式中无需指定类型,程序依然可 以编译,这是因为 javac 根据程序的上下文,在后台 推断出了参数的类型。Lambda 表达式的类型依赖于上 下文环境,是由编译器推断出来的。这就是所谓的 “类型推断”
Predicate<Integer> atLeast5 = x -> x > 5;
依据Predicate
** 反例 **
BinaryOperator add = (x, y) -> x + y;
编译报错,因为无法推断xy的类型,则认定xy类型为Object,而Object类型不支持+操作符
心如止水,虚怀如谷