JDK8的Lambda表达式

Lambda表达式由3部分构成:

  1. 参数列表
  2. 箭头——箭头 -> 把参数列表与Lambda主体分隔开
  3. Lambda主体-----表达式就是Lambda的返回值了

Lambda的基本语法是

  (parameters) -> expression

  或(请注意语句的花括号)

  (parameters) -> { statements; }

几个正确的Lambda表达式:

  1. (String s) -> s.length()
  2. (Apple a) -> a.getWeight() > 150
  3. (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";} 。

猜你喜欢

转载自www.cnblogs.com/caizengming/p/9579157.html