### 函數式接口
接口中只有一個抽象方法的接口,稱為函數式接口。
可以使用@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);
}
```