> ### 函式接口
簡單來說就是**只定義了一個抽象方法**的接口(Object類的public方法除外),就是函數式接口,并且還提供了注解:**@FunctionalInterface**
常見的四大函式接口:
- Consumer 《T》:消費型接口,有參無返回值
- Supplier 《T》:供給型接口,無參有返回值
- Function 《T,R》::函數式接口,有參有返回值
- Predicate《T》: 斷言型接口,有參有返回值,返回值是boolean類型
在四大核心函數式接口基礎上,還提供了諸如BiFunction、BinaryOperation、toIntFunction等擴展的函數式接口,都是在這四種函數式接口上擴展而來的,不做贅述。
**總結:函數式接口的提出是為了讓我們更加方便的使用lambda表達式,不需要自己再手動創建一個函數式接口,直接拿來用就好了.**
> ### Lambda表達式
lambda表達式本質上是一段匿名內部類,也可以是一段可以傳遞的代碼。實際上lambda表達式就是函式接口的實現。lambda表達式的參數列表與返回值類型要與函式接口的抽象方法的參數列表與返回類型一致。
Lambad表達式構成,()->{};左側括號表示參數列表,當只有一個參數時,可以省略括號,{}表示lambad的主體,即方法的實現部分,當lambad的主體只有一條語句你時,可以省略{},如果方法需要返回值,也可以省略return。用->來分隔參數列表和Lambad主體。
ep:
```
long a = 12L;
Function<Long, String> function = l -> l + "";
System.out.println(function.apply(12L));
```
> ### 方法的引用
若lambda體中的內容有方法已經實現了,那么可以使用“方法引用”
也可以理解為方法引用是lambda表達式的另外一種表現形式并且其語法比lambda表達式更加簡單
- 對象::實例方法名
```
Consumer<Object> co = x -> System.out.println(x);
// 參數列表及返回類型與調用方法列表一致。
// 上例可以直接寫成
Consumer<Object> co2 = System.out::println;
```
- 類名::實例方法名
```
BiFunction<String,String,Boolean> bi = (x1, x2) -> x1.equals(x2);
// 傳入的第一個參數表示實例對象,之后的參數列表及返回類型與調用方法一致。
// 上例可以直接寫成
BiFunction<String,String,Boolean> bi2 = String::equals;
```
- 類名::靜態方法名
```
BiFunction<Integer,Integer,Integer> f = (x1, x2) -> Integer.compare(x1, x2);
// 參數列表及返回類型與調用方法列表一致。
// 上例可以直接寫成
BiFunction<Integer,Integer,Integer> f2 = Integer::compare;
```
- 對象的創建
```
// 無參構造
Supplier<String> sup = () -> new String();
// 上例可寫為
Supplier<String> sup1 = String::new;
// 有一參數的構造器
Function<String, String> f = x -> new String(x);
// 上例可寫為
Function<String, String> f2 = String::new;
```
- 數組的創建
```
Function<Integer, Integer[]> f = x -> new Integer[x];
// 上例可寫為
Function<Integer, Integer[]> f2 = Integer[]::new;
```
*****
原文鏈接:https://blog.csdn.net/qq_29411737/article/details/80835658
- 2111總結
- 1.面向對象
- 1.0.1 super()與this()的區別
- 1.0.2 private、default、protected、public的訪問范圍
- 1.0.3 continue、break、return區別
- 1.0.4 重載和重寫的區別
- 1.0.5 final的特點
- 1.0.6 抽象類與接口的區別
- 1.0.7 java類型
- 1.0.8 什么是反射
- 1.0.9 類的加載機制
- 1.1.1 jvm內存結構
- 1.1.2 java垃圾回收機制
- 1.1.3 并發問題
- 1.1.3.1 線程的狀態與關系
- 1.1.3.2 并發的三大性質
- 1.1.3.3 線程的實現與使用
- 1.1.3.4 線程池相關
- 1.1.3.5 并發相關方法
- 1.1.3.6 線程相關工具
- 1.1.4 jdk8特性
- 1.1.4.1 lambad表達式的使用
- 1.1.4.2 stream API
- 1.1.4.3 Optional容器使用
- 1.1.4.4 LocalDateTime
- 1.15 io流
- 1.16 動態代理實現
- 2.JavaEE
- 2.0.1 JSP四大作用域九大內置對象
- 2.0.2 cookie與session的區別
- 4.數據庫相關
- 5.git版本管理
- 7.一些問題解決
- 7.1 分布式鎖如何實現