3.1 Lambda管中窥豹
Lambda表达式描述计算的λ演算法,可理解为简洁地表示可传递的匿名函数的一种方式。
- 简洁:无需像匿名类写很多模板代码;
- 传递:Lambda表达式存储在变量中或者作为参数传递给方法;
- 匿名:像匿名类无需定义显式定义名称;
- 函数:和方法一样有参数列表、函数主体、返回类型,可能有异常列表,但不属于特定的类;
// 匿名类
Comparator<Apple> byWeight = new Comparator<Apple>() {
@Override
public int compare(Apple o1, Apple o2) {
return o1.getWeight().compareTo(o2.getWeight());
}
};
// Lambda表达式
Comparator<Apple> byWeight2 = (Apple o1, Apple o2) -> o1.getWeight().compareTo(o2.getWeight());
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);
};
() -> 42;
(Apple o1, Apple o2) -> o1.getWeight().compareTo(o2.getWeight());
测验3.1: Lambda语法
根据上述语法规则,以下哪个不是有效的Lambda表达式?
-
() -> {}
;√ -
() -> "Raoul"
;√ -
() -> { return "Mario"; }
;√ -
(Integer i) -> return "Alan" + i;
;×修正为
(Integer i) -> "Alan" + i
或者(Integer i) -> { return "Alan" + i; }
-
(String s) -> { "IronMan"; }
;×修正为
(String s) -> "IronMan"
或者(String s) -> { return "IronMan"; }