相关源码地址:https://github.com/liudongdong0909/java8/tree/master/java8-Lambda/src/com/donggua
一、什么是函数式接口
- 只包含一个抽象方法的接口, 称为函数式接口。
- 可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常, 那么该异常需要在目标接口的抽象方法上进行声明)
- 可以再任意函数式接口上使用 @FunctionalInterface 注解, 这样可以检查他是否是一个函数式接口, 同时 javadoc 也会包含一条声明, 说明这个接口是一个函数式接口。
二、自定义函数式接口
函数式接口中使用泛型
三、作为参数传递Lambda表达式
为了将 Lambda 表达式作为参数传递, 接收 lambda 表达式的参数类型必须是与该 Lambda 表达式兼容的函数式接口的类型
四、java8内置四大核心函数式接口
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
Consumer< T> 消费型接口 |
T | void | 对类型为T的对象应用操作,包含方法: void accept(T t) |
Supplier< T> 供给型接口 |
无 | T | 返回类型为T的对象,包含方法: T get(); |
Function< T,R> 函数型接口 |
T | R | 对类型为T的对象应用操作,并返回结果是R类型的对象。包含方法: R apply(T t); |
Predicate< T> 断定型接口 |
T | boolean</ |