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表达式基本语法

列举五个有效的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表达式?

  1. () -> {};√

  2. () -> "Raoul";√

  3. () -> { return "Mario"; };√

  4. (Integer i) -> return "Alan" + i;;×

    修正为(Integer i) -> "Alan" + i或者(Integer i) -> { return "Alan" + i; }

  5. (String s) -> { "IronMan"; };×

    修正为(String s) -> "IronMan"或者(String s) -> { return "IronMan"; }

posted @ 2023-06-28 17:20  夜是故乡明  阅读(4)  评论(0编辑  收藏  举报