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