### 函數式接口
* 函數式接口代表只包含一個抽象方法的接口;
* 函數式接口可以包含多個默認方法、類方法,但只能聲明一個抽象方法;

### java.util.function系統函數式接口

JDK 1.8之前已有的函數式接口:
* java.lang.Runnable
* java.util.concurrent.Callable
* java.security.PrivilegedAction
* java.util.Comparator
* java.io.FileFilter
* java.nio.file.PathMatcher
* java.lang.reflect.InvocationHandler
* java.beans.PropertyChangeListener
* java.awt.event.ActionListener
* javax.swing.event.ChangeListener
JDK 1.8 新增加的函數接口:
* java.util.function
java.util.function 它包含了很多類,用來支持 Java的 函數式編程,該包中的函數式接口有:
|序號|接口&描述 |
| :--- | :--- |
| 1 | BiConsumer<T,U>**代表了一個接受兩個輸入參數的操作,并且不返回任何結果 |
| 2 | BiFunction<T,U,R>**代表了一個接受兩個輸入參數的方法,并且返回一個結果 |
| 3 | BinaryOperator<T>**代表了一個作用于于兩個同類型操作符的操作,并且返回了操作符同類型的結果 |
| 4 | BiPredicate<T,U>**代表了一個兩個參數的boolean值方法 |
| 5 | BooleanSupplier**代表了boolean值結果的提供方 |
| 6 | Consumer<T>**代表了接受一個輸入參數并且無返回的操作 |
| 7 | DoubleBinaryOperator**代表了作用于兩個double值操作符的操作,并且返回了一個double值的結果。 |
| 8 | DoubleConsumer**代表一個接受double值參數的操作,并且不返回結果。 |
| 9 | DoubleFunction<R>**代表接受一個double值參數的方法,并且返回結果 |
| 10 | DoublePredicate**代表一個擁有double值參數的boolean值方法 |
| 11 | DoubleSupplier**代表一個double值結構的提供方 |
| 12 | DoubleToIntFunction**接受一個double類型輸入,返回一個int類型結果。 |
| 13 | DoubleToLongFunction**接受一個double類型輸入,返回一個long類型結果 |
| 14 | DoubleUnaryOperator**接受一個參數同為類型double,返回值類型也為double 。 |
| 15 | Function<T,R>**接受一個輸入參數,返回一個結果。 |
| 16 | IntBinaryOperator**接受兩個參數同為類型int,返回值類型也為int 。 |
| 17 | IntConsumer**接受一個int類型的輸入參數,無返回值 。 |
| 18 | IntFunction<R>**接受一個int類型輸入參數,返回一個結果 。 |
| 19 | IntPredicate**:接受一個int輸入參數,返回一個布爾值的結果。 |
| 20 | IntSupplier**無參數,返回一個int類型結果。 |
| 21 | IntToDoubleFunction**接受一個int類型輸入,返回一個double類型結果 。 |
| 22 | IntToLongFunction**接受一個int類型輸入,返回一個long類型結果。 |
| 23 | IntUnaryOperator**接受一個參數同為類型int,返回值類型也為int 。 |
| 24 | LongBinaryOperator**接受兩個參數同為類型long,返回值類型也為long。 |
| 25 | LongConsumer**接受一個long類型的輸入參數,無返回值。 |
| 26 | LongFunction<R>**接受一個long類型輸入參數,返回一個結果。 |
| 27 | LongPredicate**R接受一個long輸入參數,返回一個布爾值類型結果。 |
| 28 | LongSupplier**無參數,返回一個結果long類型的值。 |
| 29 | LongToDoubleFunction**接受一個long類型輸入,返回一個double類型結果。 |
| 30 | LongToIntFunction**接受一個long類型輸入,返回一個int類型結果。 |
| 31 | LongUnaryOperator**接受一個參數同為類型long,返回值類型也為long。 |
| 32 | ObjDoubleConsumer<T>**接受一個object類型和一個double類型的輸入參數,無返回值。 |
| 33 | ObjIntConsumer<T>**接受一個object類型和一個int類型的輸入參數,無返回值。 |
| 34 | ObjLongConsumer<T>**接受一個object類型和一個long類型的輸入參數,無返回值。 |
| 35 | Predicate<T>**接受一個輸入參數,返回一個布爾值結果。 |
| 36 | Supplier<T>**無參數,返回一個結果。 |
| 37 | ToDoubleBiFunction<T,U>**接受兩個輸入參數,返回一個double類型結果 |
| 38 | ToDoubleFunction<T>**接受一個輸入參數,返回一個double類型結果 |
| 39 | ToIntBiFunction<T,U>**接受兩個輸入參數,返回一個int類型結果。 |
| 40 | ToIntFunction<T>**接受一個輸入參數,返回一個int類型結果。 |
| 41 | ToLongBiFunction<T,U>**接受兩個輸入參數,返回一個long類型結果。 |
| 42 | ToLongFunction<T>**接受一個輸入參數,返回一個long類型結果。 |
| 43 | UnaryOperator<T>**接受一個參數為類型T,返回值類型也為T。 |
- java演變
- JDK各個版本的新特性
- JDK1.5新特性
- JDK1.6新特性
- JDK1.7新特性
- JDK1.8新特性
- JAVA基礎
- 面向對象特性
- 多態
- 方法重載
- 方法重寫
- class
- 常量
- 訪問修飾符
- 類加載路徑
- java-equals
- 局部類
- java-hashCode
- Java類初始化順序
- java-clone方法
- JAVA對象實例化的方法
- 基礎部分
- JAVA基礎特性
- JAVA關鍵字
- javabean
- static
- 日期相關
- final
- interface
- 函數式接口
- JAVA異常
- 異常屏蔽
- try-with-resource資源泄露
- JAVA引用
- WeakReference
- SoftReference
- PhantomReference
- 位運算符
- try-with-resource語法糖
- JDK冷知識
- JAVA包裝類
- JAVA基本類型與包裝類
- java.lang.Boolean
- java.lang.Integer
- java.lang.Byte
- java.lang.Short
- java.lang.Long
- java.lang.Float
- java.lang.Double
- java.lang.Character
- 日期相關
- TemporalAdjusters
- String
- 字符串常量池
- String拼接
- String編譯期優化
- StringBuilder&StringBuffer
- intern
- 注解
- java標準注解
- 內置注解
- 元注解
- 自定義注解
- 注解處理器
- JVM注解
- Java8 Annotation新特性
- 反射-Reflective
- Reflection
- Class
- Constructor
- Method
- javabean-property
- MethodHandles
- 泛型
- 類型擦除
- bridge-method
- Accessor&Mutator方法
- enum
- JAVA數組
- finalize方法
- JAR文件
- JAVA高級編程
- CORBA
- JMX
- SPI
- Java SPI使用約定
- ServiceLoader
- 實際應用
- IO
- 工具類
- JDK常用工具類
- Objects
- System
- Optional
- Throwable
- Collections
- Array
- Arrays
- System
- Unsafe
- Number
- ClassLoader
- Runtime
- Object
- Comparator
- VarHandle
- 數據結構
- 棧-Stack
- 隊列(Queue)
- Deque
- PriorityQueue
- BlockingQueue
- SynchronousQueue
- ArrayBlockingQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- ConcurrentLinkedQueue
- 列表
- 迭代器
- KV鍵值對數據類型
- HashMap
- TreeMap
- Hash沖突
- ConcurrentHashMap
- JDK1.7 ConcurrentHashMap結構
- jdk7&jdk8區別
- 集合
- Vector
- Stack
- HashSet
- TreeSet
- ArrayList
- LinkedList
- ArrayList && LinkedList相互轉換
- 線程安全的集合類
- 集合類遍歷性能
- 并發容器
- CopyOnWriteArrayList
- ConcurrentHashMap
- 同步容器
- BitMap
- BloomFilter
- SkipList
- 設計模式
- 設計模式六大原則
- 單例模式
- 代理模式
- 靜態代理
- 動態代理
- JDK動態代理
- cglib動態代理
- spring aop
- 策略模式
- SpringAOP策略模式的運用
- 生產者消費者模式
- 迭代器模式
- 函數式編程
- 方法引用
- 性能問題
- Lambda
- Lambda類型檢查
- Stream
- findFirst和findAny
- reduce
- 原始類型流特化
- 無限流
- 收集器
- 并行流
- AOP
- 靜態織入
- aspect
- aspect的定義
- AspectJ與SpringAOP
- 動態織入
- 靜態代理
- 動態代理
- JDK動態代理
- CGLib動態代理
- Spring AOP
- SpringAOP五種通知類型
- @Before
- @AfterReturning
- @AfterThrowing
- @After
- @Around
- Aspect優先級
- SpringAOP切點表達式
- within
- execution
- 嵌套調用
- 系統優化與重構
- 重疊構造器模式
- 工具類構造器優化
- 常見面試題
- new Object()到底占用幾個字節
- 訪問修飾符
- cloneable接口實現原理
- 異常分類以及處理機制
- wait和sleep的區別
- 數組在內存中如何分配
- 類加載為什么要使用雙親委派模式,有沒有什么場景是打破了這個模式
- 類的實例化順序
- 附錄
- JAVA術語
- FAQ
- 墨菲定律
- 康威定律
- 軟件設計原則
- 阿姆達爾定律
- 字節碼工具
- OSGI