Java 8新特性 內(nèi)建函數(shù)式接口詳解
Java 8新特性內(nèi)建函數(shù)式接口
在之前的一片博文 Lambda 表達式,提到過Java 8提供的函數(shù)式接口。在此文中,將介紹一下Java 8四個最基本的函數(shù)式接口
對于方法的引用,嚴格來講都需要定義一個接口。不管我們?nèi)绾尾僮鲗嶋H上有可能操作的接口只有四種。
Java 8 提供了函數(shù)式接口包java.util.function.*,在該包下有許多Java 8內(nèi)建的函數(shù)式接口。不過基本上分為四種基本的:
功能型接口 (Function)
將 T 作為輸入,返回 R 作為輸出,他還包含了和其他函數(shù)組合的默認方法。
@FunctionalInterface public interface Function<T, R> { R apply(T t); }
示例代碼
public static void main(String[] args) { // 這里用到了Java8的 方法引用,功能型函數(shù)式接口! Function<String,Boolean> function = "Hello Java" :: endsWith; System.out.println(function.apply("Java")); }
消費型接口 (Consumer)
將 T 作為輸入,不返回任何內(nèi)容,表示在單個參數(shù)上的操作。
@FunctionalInterface public interface Consumer<T> { void accept(T t); }
示例代碼
class TestDemo{ //此方法沒有返回值,但是有輸入?yún)?shù) public void fun(String str){ System.out.println(str); } } public class TestFunctional { public static void main(String[] args) { TestDemo demo = new TestDemo(); //消費型接口,只有輸入?yún)?shù),沒有輸出參數(shù) Consumer<String> consumer = demo :: fun; consumer.accept(""); } }
供應型接口 (Supplier)
沒有輸入?yún)?shù),只有T返回輸出
@FunctionalInterface public interface Supplier<T> { T get(); }
示例代碼
public class TestFunctional { public static void main(String[] args) { //供應商類型接口,只有輸出參數(shù),沒有輸入?yún)?shù)! Supplier<String> supplier = "java 8" :: toUpperCase; System.out.println(supplier.get()); } }
斷言型接口 (Predicate)
將 T 作為輸入,返回一個布爾值作為輸出,該接口包含多種默認方法來將 Predicate 組合成其他復雜的邏輯(與、或、非)。
@FunctionalInterface public interface Predicate<T> { boolean test(T t); }
示例代碼
public class TestFunctional { public static void main(String[] args) { //斷言類型接口。有輸入?yún)?shù),輸出參數(shù)為布爾值 Predicate<String> predicate = "Android" :: equalsIgnoreCase; System.out.println(predicate.test("android")); } }
所以在Java 8中由于存在有以上的四個功能型接口,所以一般很少會由用戶去定義新的函數(shù)式接口!
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
jsch中ChannelShell與ChannelExec的區(qū)別及說明
這篇文章主要介紹了jsch中ChannelShell與ChannelExec的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07詳解 Corba開發(fā)之Java實現(xiàn)Service與Client
這篇文章主要介紹了詳解 Corba開發(fā)之Java實現(xiàn)Service與Client的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10詳解SpringCloud LoadBalancer 新一代負載均衡器
這篇文章主要為大家介紹了SpringCloud LoadBalancer新一代負載均衡器詳解使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01