函数式接口
一个接口,只有一个方法
@Functionallnterface
可选,非必选
1 |
|
常用的函数式接口:
- Supplier接口
- Consumer接口
- Predicate接口
- Function接口
Lambda
Lambda表达式只能在可以使用函数式接口实例的地方使用
它支持将代码块作为方法参数,创建只有一个抽象方法的接口的实例
用于简化创建匿名内部类对象
() -> {}
str -> str.toUpperCase()
(String s) -> {}
(a,b) -> {}
替代一个对象,对象内只重写了一个方法
返回值:
1 | // 右边是一个表达式,它的值就是返回值 |
Example
1 | // 匿名内部类的方式: |
可省略为:
1 | Thread t3 = new Thread(()->{ |
方法引用 ::
方法引用有四种类型:
- 静态方法引用
String::valueOf
直接调用静态方法
相当于(x) -> String.valueOf(x)
- 特定对象的方法引用
cat::eat
相当于(x) -> cat.eat(x)
- 该类的任意对象的方法引用
String::compareTo
- 相当于
(x, y) -> x.compareTo(y)
- 构造方法引用
Person::new
相当于(x) -> new Person(x)
方法签名相同则可用(方法参数的数量和类型、返回类型相同)
forEach
遍历,方法引用的应用
1 | names.forEach(System.out::println); |