一、什么是函数式接口
只包含一个抽象方法的接口,称为函数式接口。 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。
可以在任意函数式接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
简而言之,就是一个接口中有且仅有一个抽象方法,称之为函数式接口.(1.8存在默认接口和方法.)
举例:
二、自定义函数式接口
1、自定义函数式接口
1 @FunctionalInterface 2 public interface LambdaDemo { 3 4 /** 5 * 有且仅有一个方法 6 * @param x 7 * @param y 8 * @return 9 */ 10 Integer count(int x,int y); 11 }
2、自定义泛型函数式接口
1 @FunctionalInterface 2 public interface MyFunction<T> { 3 4 5 T getValue(T t); 6 }
三、作为参数传递 Lambda 表达式
1 @Override 2 public String getValue(MyFunction<String> string, String t2) { 3 return t1.getValue(string,t2); 4 }
作为表达式
1 List<Employee> myEmployeeList = acutalEmployee(employeeList, employee -> employee.getSalary() >= 10000);
四、Java 内置四大核心函数式接口
函数式接口 | 参数类型 | 返回类型 | 用途 |
Consumer<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 | 确定类型为T的对象是否 满足某约束,并返回 boolean 值。包含方法 boolean test(T t); |