Java 8新特性 內(nèi)建函數(shù)式接口詳解
Java 8新特性內(nèi)建函數(shù)式接口
在之前的一片博文 Lambda 表達(dá)式,提到過Java 8提供的函數(shù)式接口。在此文中,將介紹一下Java 8四個(gè)最基本的函數(shù)式接口
對于方法的引用,嚴(yán)格來講都需要定義一個(gè)接口。不管我們?nèi)绾尾僮鲗?shí)際上有可能操作的接口只有四種。
Java 8 提供了函數(shù)式接口包java.util.function.*,在該包下有許多Java 8內(nèi)建的函數(shù)式接口。不過基本上分為四種基本的:
功能型接口 (Function)
將 T 作為輸入,返回 R 作為輸出,他還包含了和其他函數(shù)組合的默認(rèn)方法。
@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")); }
消費(fèi)型接口 (Consumer)
將 T 作為輸入,不返回任何內(nèi)容,表示在單個(gè)參數(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(); //消費(fèi)型接口,只有輸入?yún)?shù),沒有輸出參數(shù) Consumer<String> consumer = demo :: fun; consumer.accept(""); } }
供應(yīng)型接口 (Supplier)
沒有輸入?yún)?shù),只有T返回輸出
@FunctionalInterface public interface Supplier<T> { T get(); }
示例代碼
public class TestFunctional { public static void main(String[] args) { //供應(yīng)商類型接口,只有輸出參數(shù),沒有輸入?yún)?shù)! Supplier<String> supplier = "java 8" :: toUpperCase; System.out.println(supplier.get()); } }
斷言型接口 (Predicate)
將 T 作為輸入,返回一個(gè)布爾值作為輸出,該接口包含多種默認(rèn)方法來將 Predicate 組合成其他復(fù)雜的邏輯(與、或、非)。
@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中由于存在有以上的四個(gè)功能型接口,所以一般很少會(huì)由用戶去定義新的函數(shù)式接口!
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
java實(shí)現(xiàn)基于Tcp的socket聊天程序
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)基于Tcp的socket聊天程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07jsch中ChannelShell與ChannelExec的區(qū)別及說明
這篇文章主要介紹了jsch中ChannelShell與ChannelExec的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java代碼注釋規(guī)范(動(dòng)力節(jié)點(diǎn)整理)
代碼注釋是架起程序設(shè)計(jì)者與程序閱讀者之間的通信橋梁,最大限度的提高團(tuán)隊(duì)開發(fā)合作效率。也是程序代碼可維護(hù)性的重要環(huán)節(jié)之一。下面通過本文說一下我們在日常開發(fā)中使用的代碼注釋規(guī)范2017-03-03Java網(wǎng)絡(luò)編程之基于TCP協(xié)議
本文主要將Java基于TCP的網(wǎng)絡(luò)編程主要分解成5個(gè)功能:功能分解1:單向通信功能分解,2:雙向通信功能分解,3:對象流傳送功能分解,4:加入完整的處理異常方式功能分解,5:多線程接收用戶請求,需要的朋友可以參考下2021-05-05詳解 Corba開發(fā)之Java實(shí)現(xiàn)Service與Client
這篇文章主要介紹了詳解 Corba開發(fā)之Java實(shí)現(xiàn)Service與Client的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10java高并發(fā)鎖的3種實(shí)現(xiàn)示例代碼
本篇文章主要介紹了java高并發(fā)鎖的3種實(shí)現(xiàn)示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08詳解SpringCloud LoadBalancer 新一代負(fù)載均衡器
這篇文章主要為大家介紹了SpringCloud LoadBalancer新一代負(fù)載均衡器詳解使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01