《Java8实战》| Chapter3 Lambda表达式
Part1. 基础知识篇
Chapter3. Lambda表达式
3.1 Lambda管中窥豹
+. 1)可以把Lambda表达式理解为间接地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表:
- 匿名:没有明确的名称
- 函数:Lambda函数不像方法那样属于某个特定的类,但和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表
- 传递:Lambda表达式可以作为参数传递给方法或存储在变量中
- 简洁:无需像匿名类那样写很多模板代码
+. 2)Lambda表达式由参数列表、箭头和主体组成:
- Comparator
compareByWeight = (Apple apple1, Apple apple2) -> apple1.getWeight().compareTo(apple2.getWeight()); - 由于类型推断机制,还可以简写为:Comparator
compareByWeight = (apple1, apple2) -> apple1.getWeight().compareTo(apple2.getWeight());
- 3)Lambda表达式的三部分:
- 参数列表
- 箭头:把参数列表和Lambda主体分隔开
- Lambda主体:表达式就是Lambda的返回值了
- 4)几个有效的Lambda表达式例子:
- (String s) -> s.length(); 具有一个String类型的参数,返回一个int,注意:Lambda没有return语句,因为已经隐含了return(函数主体用{}括起除外)
- (Apple a) -> a.getWeight() > 150; 有一个Apple类型的参数,并返回一个boolean
- (int x, int y) -> { System.out.println(“Result:”); System.out.println(x+y); } 具有两个int类型的参数,没有返回值(void返回),注意:Lambda表达式可以包含多行语句
- () -> 42; 没有参数列表,返回一个int
- (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 具有两个Apple类型的参数,返回一个int,比较两个Apple的重量
- 5)Lambda基本语法:
- (parameters) -> expression
- (parameters) -> { statements; }
3.2 在哪里以及如何使用Lambda
可以在函数式接口上使用Lambda表达式
3.2.1 函数式接口
- 函数式接口:只定义了一个抽象方法的接口