java8新特性_乐字节-Java8新特性-函数式接口
上一篇小樂帶大家學過 Java8新特性-Lambda表達式,那什么時候可以使用Lambda?通常Lambda表達式是用在函數式接口上使用的。從Java8開始引入了函數式接口,其說明比較簡單:函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。 java8引入@FunctionalInterface 注解聲明該接口是一個函數式接口。
3.1、語法定義
/**在Java8 以前,已有大量函數式接口形式的接口(接口中只存在一個抽象方法),只是沒有強制聲明。例如:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
Java8 新增加的函數接口在java.util.function 包下,它包含了很多類,用來支持 Java的 函數式編程,該包中的函數式接口有:
對于Java8中提供的這么多函數式接口,開發中常用的函數式接口有以下幾個
? Predicate,Consumer,Function,Supplier。
3.2、函數式接口實例
3.2.1、Predicate
? java.util.function.Predicate<T> 接口定義了一個名叫 test 的抽象方法,它接受泛型 T 對象,并返回一個boolean值。在對類型 T進行斷言判斷時,可以使用這個接口。通常稱為斷言性接口 。
使用Predicate接口實現字符串判空操作
@FunctionalInterface測試代碼
public測試結果:
3.2.2、Consumer
? java.util.function.Consumer<T>接口定義了一個名叫 accept 的抽象方法,它接受泛型T,沒有返回值(void)。如果需要訪問類型 T 的對象,并對其執行某些操作,可以使用這個接口,通常稱為消費性接口。
使用Consumer實現集合遍歷操作
@FunctionalInterface3.2.3、Function
? java.util.function.Function<T, R>接口定義了一個叫作apply的方法,它接受一個泛型T的對象,并返回一個泛型R的對象。如果需要定義一個Lambda,將輸入的信息映射到輸出,可以使用這個接口(比如提取蘋果的重量,或把字符串映射為它的長度),通常稱為功能性接口。
使用Function實現用戶密碼 Base64加密操作
@FunctionalInterface加密后結果如下:
3.2.4、Supplier
? java.util.function.Supplier<T>接口定義了一個get的抽象方法,它沒有參數,返回一個泛型T的對象,這類似于一個工廠方法,通常稱為功能性接口。
使用Supplier實現SessionFactory創建
@FunctionalInterface總結
以上是生活随笔為你收集整理的java8新特性_乐字节-Java8新特性-函数式接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qt如何讲自己定义的label放到mai
- 下一篇: java美元兑换,(Java实现) 美元