### 函数式接口
接口中只有一个抽象方法的接口,称为函数式接口。
可以使用@FunctionalInterface注解修饰 会检查是否是函数式接口。
### 四大核心函数式接口
#### 1.Consumer 消费型接口
```java
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
```
#### 2.Predicate 预言型接口
```java
@FunctionalInterface
public interface Predicate<T>{
boolean test(T t);
}
```
#### 3.Supplier 供给型接口
```java
@FunctionalInterface
public interface Supplier<T> {
T get();
}
```
#### 4.Function 函数型接口
```java
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
```
* * * * *
**附:当一段代码里面只有方法不一样时 要考虑使用高阶函数进行处理**
其实lamdba代替的角色就是事前不知道一个接口中具体该执行怎样的代码逻辑,倘若要实现不同的逻辑需要实现这个接口,现在就是把实现的逻辑放到一个lamdba中。当lamdba代替那个接口的具体实现类。
```java
Integer num = getValue(5, Math::abs);
Integer num_1 = getValue(5, t -> (t + 3) * 5);
private static <T, R> R getValue(T num, Function<T, R> function) {
return function.apply(num);
}
```