Part1. 基础知识篇

Chapter3. Lambda表达式

3.1 Lambda管中窥豹

+. 1)可以把Lambda表达式理解为间接地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表:

  1. 匿名:没有明确的名称
  2. 函数:Lambda函数不像方法那样属于某个特定的类,但和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表
  3. 传递:Lambda表达式可以作为参数传递给方法或存储在变量中
  4. 简洁:无需像匿名类那样写很多模板代码

+. 2)Lambda表达式由参数列表、箭头和主体组成:

  1. Comparator compareByWeight = (Apple apple1, Apple apple2) -> apple1.getWeight().compareTo(apple2.getWeight());
  2. 由于类型推断机制,还可以简写为:Comparator compareByWeight = (apple1, apple2) -> apple1.getWeight().compareTo(apple2.getWeight());
  • 3)Lambda表达式的三部分:
  1. 参数列表
  2. 箭头:把参数列表和Lambda主体分隔开
  3. Lambda主体:表达式就是Lambda的返回值了
  • 4)几个有效的Lambda表达式例子:
  1. (String s) -> s.length(); 具有一个String类型的参数,返回一个int,注意:Lambda没有return语句,因为已经隐含了return(函数主体用{}括起除外)
  2. (Apple a) -> a.getWeight() > 150; 有一个Apple类型的参数,并返回一个boolean
  3. (int x, int y) -> { System.out.println(“Result:”); System.out.println(x+y); } 具有两个int类型的参数,没有返回值(void返回),注意:Lambda表达式可以包含多行语句
  4. () -> 42; 没有参数列表,返回一个int
  5. (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 具有两个Apple类型的参数,返回一个int,比较两个Apple的重量
  • 5)Lambda基本语法:
  1. (parameters) -> expression
  2. (parameters) -> { statements; }

3.2 在哪里以及如何使用Lambda

可以在函数式接口上使用Lambda表达式

3.2.1 函数式接口

  • 函数式接口:只定义了一个抽象方法的接口