JDK8的Lambda表达式
Lambda表达式由3部分构成:
- 参数列表
- 箭头——箭头 -> 把参数列表与Lambda主体分隔开
- Lambda主体-----表达式就是Lambda的返回值了
Lambda的基本语法是
(parameters) -> expression
或(请注意语句的花括号)
(parameters) -> { statements; }
几个正确的Lambda表达式:
- (String s) -> s.length()
- (Apple a) -> a.getWeight() > 150
-
(int x, int y) -> {
System.out.println("Result:");
System.out.println(x+y);
}
4.() -> 42
5.(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())
解释:
第一个Lambda表达式具有一个 String 类型的参数并返回一个 int 。Lambda没有 return 语句,因为已经隐含了 return
第二个Lambda表达式有一个Apple 类 型 的参数并返回一个 boolean (苹果的重量是否超过150克)
第三个Lambda表达式具有两个 int 类型的参数而没有返回值( void 返回)。注意Lambda表达式可以包含多行语句,这里是两行
第四个Lambda表达式没有参数,返回一个int
第五个Lambda表达式具有两个 Apple 类型的参数,返回一个 int :比较两个 Apple 的重量
根据上述语法规则,以下哪个不是有效的Lambda表达式?
(1) () -> {}
(2) () -> "Raoul"
(3) () -> {return "Mario";}
(4) (Integer i) -> return "Alan" + i;
(5) (String s) -> {"IronMan";}
答案:只有4和5是无效的Lambda。
(1) 这个Lambda没有参数,并返回 void 。它类似于主体为空的方法: public void run() {} 。
(2) 这个Lambda没有参数,并返回 String 作为表达式。
(3) 这个Lambda没有参数,并返回 String (利用显式返回语句)。
(4) return 是一个控制流语句。要使此Lambda有效,需要使花括号,如下所示:(Integer i) -> {return "Alan" + i;} 。
(5)“Iron Man”是一个表达式,不是一个语句。要使此Lambda有效,你可以去除花括号和分号,如下所示: (String s) -> "Iron Man" 。或者如果你喜欢,可以使用显式返回语句,如下所示: (String s)->{return "IronMan";} 。