Java8InAction学习笔记(一) - 18965050/Java8InAction GitHub Wiki
Lamda表达式
四个特点:
- 匿名
- 函数化
- 简洁
格式:
//不加大括号, 表达式
(parameters) -> expression
或
//加大括号, 语句
(parameters) -> { statements; }
函数接口
函数接口是使用lambda表达式的基础. 函数接口指的是只有一个抽象方法的接口(注意, Java8中支持default方法实现).比如Comparator. 这个方法被称为函数描述符(function descriptor)
Java8中的一些功能函数接口

@FunctionalInterface
此注解放在函数接口上,用于编译校验. 此注解对函数接口并非是必须的,但我们建议这么做
Java8中提供的一些函数接口
- Predicate(T-> boolean): 对象条件测试
- Function(T -> R): 用于对象转换
- Consumer(T -> void): 用于对象消费
- Supplier(() -> T): 用于对象生成
lambda的类型推理
(Apple a)-> "green".equals(a.getColor())
可被推理为:
(a)-> "green".equals(a.getColor())
或
a-> "green".equals(a.getColor()) //只有一个参数的情况
capturing lambda
lambda表达式可使用外部变量. 对应实例和静态变量, 没有限制. 但对于局部变量必须是final或有效final(effective final)的.
方法引用
方法引用在已有的方法上实现函数式接口的方式调用(即lambda表达式的替换). 比如:
Comparator.comparing(p -> p.getName());
//可写为
Comparator.comparing(Person::getName);
构造器引用
通过 ClassName::new解决