- lambda 提供一种简化代码的方式;
- lambda 可以视作一个只有函数参数和方法体的方法, 没有修饰符、函数名和返回值声明;
- 实现内部类的效果(也内部类类似但有不同点)
- 能使用 lambda 的接口, 是函数式接口(接口内只有一个抽象方法)
参数
- 参数可以声明类型, 也可以不声明而由上下文自动推导出类型
- 参数放在()里, 多个参数使用 "," 分开
- 一个参数且类型是自动推导出来的, 那么 () 可以省略;
- 零个参数可以直接写();
表达式
- 表达式可以有若干条, 只有一条时, "{}" 可以省略;
- 只有一行的话, return 可以省略
一些概念
函数式接口
- 只拥有一个方法的接口称为 函数式接口
- 编译器可以自动判断一个接口是否是函数式接口
- @FunctionalInterface 注解来显式指定一个接口是函数式接口
java.util.function,它里面包含了常用的函数式接口,例如:
- Predicate
——接收 T 并返回 boolean - Consumer
——接收 T,不返回值 - Function
——接收 T,返回 R - Supplier
——提供 T 对象(例如工厂),不接收值 - UnaryOperator
——接收 T 对象,返回 T - BinaryOperator
——接收两个 T,返回 T
与 java.util.stream.Stream 配合
与 Stream 配合使用
1 2 3 4 5 6 7 8 9 |
// 该例子来源 docs.oracle.com roster .stream() .filter( p -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25) .map(p -> p.getEmailAddress()) .forEach(email -> System.out.println(email)); |
0 Comments