最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

妙用Java8中的Function接口消滅if...else

 更新時間:2022年01月26日 15:56:26   作者:不可食用鹽  
在開發(fā)過程中經常會使用if...else...進行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼中嚴重影響了代碼代碼的美觀,本文就妙用Java8中的Function接口消滅if...else,感興趣的可以了解一下

在開發(fā)過程中經常會使用if...else...進行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼中嚴重影響了代碼代碼的美觀,這時我們可以利用Java 8的Function接口來消滅if...else...

if (...){
    throw new RuntimeException("出現異常了");
} 

if (...){
    doSomething();
} else {
    doOther();
}

Function 函數式接口

使用注解@FunctionalInterface標識,并且只包含一個抽象方法的接口是函數式接口。函數式接口主要分為Supplier供給型函數、Consumer消費型函數、Runnable無參無返回型函數和Function有參有返回型函數。

Function可以看作轉換型函數

Supplier供給型函數

Supplier的表現形式為不接受參數、只返回數據

62455c52c2c4eccd7465236c54cda672.jpg

Consumer消費型函數

Consumer消費型函數和Supplier剛好相反。Consumer接收一個參數,沒有返回值

3bdc75f38c879c48567261e9870d1b31.jpg

Runnable無參無返回型函數

Runnable的表現形式為即沒有參數也沒有返回值

02ec81c597a64f26444f5c16edaf1ac2.jpg

Function函數的表現形式為接收一個參數,并返回一個值。Supplier、ConsumerRunnable可以看作Function的一種特殊表現形式

07501906a5bdbcd5110561af4ccb155f.jpg

使用小技巧

處理拋出異常的if

1.定義函數

定義一個拋出異常的形式的函數式接口, 這個接口只有參數沒有返回值是個消費型接口

/**
 * 拋異常接口
 **/
@FunctionalInterface
public interface ThrowExceptionFunction {

    /**
     * 拋出異常信息
     *
     * @param message 異常信息
     * @return void
     **/
    void throwMessage(String message);
}

2.編寫判斷方法

創(chuàng)建工具類VUtils并創(chuàng)建一個isTure方法,方法的返回值為剛才定義的函數式接口-ThrowExceptionFunction。ThrowExceptionFunction的接口實現邏輯為當參數b為true時拋出異常

/**
 *  如果參數為true拋出異常
 * 
 * @param b 
 * @return com.example.demo.func.ThrowExceptionFunction
 **/
public static ThrowExceptionFunction isTure(boolean b){

    return (errorMessage) -> {
        if (b){
            throw new RuntimeException(errorMessage);
        }
    };
}

3.使用方式

調用工具類參數參數后,調用函數式接口的throwMessage方法傳入異常信息。當出入的參數為false時正常執(zhí)行

0511f0d9a0b6543d1fa60cc69919fcf9.jpg

當出入的參數為true時拋出異常

251fdfbd0b6f4cc1d054e74362227ec7.jpg

處理if分支操作

1.定義函數式接口

創(chuàng)建一個名為BranchHandle的函數式接口,接口的參數為兩個Runnable接口。這兩個兩個Runnable接口分別代表了為true或false時要進行的操作

/**
 * 分支處理接口
 **/
@FunctionalInterface
public interface BranchHandle {

    /**
     * 分支操作
     *
     * @param trueHandle 為true時要進行的操作
     * @param falseHandle 為false時要進行的操作
     * @return void
     **/
    void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);

}

2.編寫判斷方法

創(chuàng)建一個名為isTureOrFalse的方法,方法的返回值為剛才定義的函數式接口-BranchHandle

/**
 * 參數為true或false時,分別進行不同的操作 
 * 
 * @param b 
 * @return com.example.demo.func.BranchHandle     
 **/
public static BranchHandle isTureOrFalse(boolean b){
    
    return (trueHandle, falseHandle) -> {
        if (b){
            trueHandle.run();
        } else {
            falseHandle.run();
        }
    };
}

3.使用方式

參數為true時,執(zhí)行trueHandle

aa571dcc3dfc275ad349d06c32d47b71.jpg

參數為false時,執(zhí)行falseHandle

2fb00360a3aaec65a6629ad71266b8b7.jpg

如果存在值執(zhí)行消費操作,否則執(zhí)行基于空的操作

1.定義函數

創(chuàng)建一個名為PresentOrElseHandler的函數式接口,接口的參數一個為Consumer接口。一個為Runnable,分別代表值不為空時執(zhí)行消費操作和值為空時執(zhí)行的其他操作

/**
 * 空值與非空值分支處理
 */
public interface PresentOrElseHandler<T extends Object> {

    /**
     * 值不為空時執(zhí)行消費操作
     * 值為空時執(zhí)行其他的操作
     * 
     * @param action 值不為空時,執(zhí)行的消費操作
     * @param emptyAction 值為空時,執(zhí)行的操作
     * @return void    
     **/
   void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
   
}

2.編寫判斷方法

創(chuàng)建一個名為isBlankOrNoBlank的方法,方法的返回值為剛才定義的函數式接口-PresentOrElseHandler。

/**
 * 參數為true或false時,分別進行不同的操作
 *
 * @param b
 * @return com.example.demo.func.BranchHandle
 **/
public static PresentOrElseHandler<?> isBlankOrNoBlank(String str){

    return (consumer, runnable) -> {
        if (str == null || str.length() == 0){
            runnable.run();
        } else {
            consumer.accept(str);
        }
    };
}

3.使用方式

調用工具類參數參數后,調用函數式接口的presentOrElseHandle方法傳入一個ConsumerRunnable

參數不為空時,打印參數

582e2fca6eb9004034816195c3ea8821.jpg

參數不為空時

ab0f8a233e9944b66cbed4ed176b505d.jpg

結尾

Function函數式接口是java 8非常重要的特性,利用好Function函數可以極大的簡化代碼。

到此這篇關于妙用Java8中的Function接口消滅if...else的文章就介紹到這了,更多相關Java8 Function接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java全面解析XML格式串(JDOM解析)

    Java全面解析XML格式串(JDOM解析)

    下面小編就為大家?guī)硪黄狫ava全面解析XML格式串(JDOM解析)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java如何基于反射機制獲取不同的類

    Java如何基于反射機制獲取不同的類

    這篇文章主要介紹了Java如何基于反射機制獲取不同的類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot實現埋點監(jiān)控

    SpringBoot實現埋點監(jiān)控

    本文主要介紹了SpringBoot實現埋點監(jiān)控,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • SpringBoot入門實現第一個SpringBoot項目

    SpringBoot入門實現第一個SpringBoot項目

    今天我們一起來完成一個簡單的SpringBoot(Hello World)。就把他作為你的第一個SpringBoot項目。具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    Netty提供異步的、基于事件驅動的網絡應用程序框架,用以快速開發(fā)高性能、高可靠性的網絡 IO 程序,是目前最流行的 NIO 框架,這篇文章主要介紹了SpringBoot 整和 Netty 并監(jiān)聽多端口,需要的朋友可以參考下
    2023-10-10
  • Java調度線程池ScheduledThreadPoolExecutor不執(zhí)行問題分析

    Java調度線程池ScheduledThreadPoolExecutor不執(zhí)行問題分析

    最近項目上反饋某個重要的定時任務突然不執(zhí)行了,很頭疼,開發(fā)環(huán)境和測試環(huán)境都沒有出現過這個問題。定時任務采用的是ScheduledThreadPoolExecutor,后來一看代碼發(fā)現踩了一個大坑。本文就來和大家聊聊這次的踩坑記錄與解決方法,需要的可以參考一下
    2023-03-03
  • 淺談Java三大框架與應用

    淺談Java三大框架與應用

    這篇文章主要介紹了淺談Java三大框架與應用,需要的朋友可以參考下
    2015-05-05
  • Java數據結構之Map與Set專篇講解

    Java數據結構之Map與Set專篇講解

    這篇文章通過實例面試題目來講解Java中Map和Set之間的關系,具有很好的參考價值,Map與Set在面試中經常會遇到。一起跟隨小編過來看看吧
    2022-01-01
  • Java中的ConcurrentLinkedQueue使用解析

    Java中的ConcurrentLinkedQueue使用解析

    這篇文章主要介紹了Java中的ConcurrentLinkedQueue使用解析,一個基于鏈接節(jié)點的無界線程安全隊列,此隊列按照 FIFO(先進先出)原則對元素進行排序,隊列的頭部是隊列中時間最長的元素,需要的朋友可以參考下
    2023-12-12
  • Java 散列存儲詳解及簡單示例

    Java 散列存儲詳解及簡單示例

    這篇文章主要介紹了Java 散列存儲詳解及簡單示例的相關資料,需要的朋友可以參考下
    2017-02-02

最新評論

太康县| 大渡口区| 秀山| 开阳县| 永仁县| 银川市| 江北区| 收藏| 永和县| 贵港市| 青浦区| 临湘市| 兰西县| 桦甸市| 德江县| 周口市| 德格县| 宜阳县| 武胜县| 会理县| 仁怀市| 石河子市| 睢宁县| 南郑县| 文登市| 滕州市| 东阿县| 辉县市| 孟州市| 铅山县| 博客| 彭州市| 瓦房店市| 柯坪县| 油尖旺区| 开江县| 敦化市| 尤溪县| 孝义市| 濮阳市| 英德市|